什麼是Spring Boot Starters?
Spring Boot Starter顧名思義是為不同目的啟動Spring Boot應用程式。比如:
spring-boot-starter-parent:它是一個特殊的啟動器,提供有用的Maven預設值。它在POM的父節中使用。
spring-boot-starter-web:使用MVC構建Web和RESTful應用程式的入門者。
spring-boot-starter-security:使用Spring Security的入門者。
spring-boot-starter-web-services:使用Spring Web服務的初學者。
spring-boot-starter-thymeleaf:使用Thymeleaf檢視的Spring MVC的初學者。
spring-boot-starter-freemarker:使用FreeMarker檢視啟動Spring MVC。
spring-boot-starter-test:單元測試和整合測試,預設引用。
spring-boot-starter-jdbc: 傳統 JDBC
spring-boot-starter-hateoas: 增加 HATEOAS 特性到服務。
spring-boot-starter-security: 使用spring安全實現驗證和授權。
spring-boot-starter-data-jpa: Spring Data JPA Hibernate支援
spring-boot-starter-cache: 啟用 Spring Framework的快取支援
這些啟動器需要配置在maven的pom.xml中,執行時這些包jar在classpath類路徑中就會被載入。下面是標準的pom.xml:
可以透過https://start.spring.io選擇元件方式,或透過Idea等開發工具Spring導航選擇元件,就會自動生成這個pom.xml檔案。
下面介紹幾個常用的Starter:
現在我們可以建立一個REST控制器:
GenericEntity是一個簡單的bean,有一個ID型別的欄位和字串。
啟動這個應用程式執行時,訪問http:// localhost:8080/entity/all
無需指定版本號。Spring Boot將自己確定要使用的版本 - 你需要指定的是spring-boot-starter-parent版本即可的版本。如果以後需要升級Boot庫和依賴項,只需在一個地方升級Boot版本,Spring Boot將負責其餘的工作。
有兩種方法可以測試REST控制器:
1.使用模擬環境
2.使用嵌入式Servlet容器(如Tomcat或Jetty)
下面使用使用模擬環境:
重要的是:@WebAppConfiguration註釋和MockMVC是spring-test模組的一部分,hasSize是一個Hamcrest匹配器,而@Before是一個JUnit註釋。這些都可以透過匯入這一個啟動器依賴項來獲得。
請注意,Springboot開箱即用特性可以至少自動支援以下資料庫:H2,Derby和Hsqldb。在我們的例子中,我們將使用H2。
為我們的實體建立儲存庫:
這裡沒有指定資料庫供應商,URL連線和使用者名稱密碼。這些不需要額外的配置,因為我們從可靠的Boot預設值中受益; 但當然,如使用MySQL Oracle等資料庫需要在application.propertie或yaml中配置所有這些細節。這些配置都是外部化的。
spring-boot-starter-parent:它是一個特殊的啟動器,提供有用的Maven預設值。它在POM的父節中使用。
spring-boot-starter-web:使用MVC構建Web和RESTful應用程式的入門者。
spring-boot-starter-security:使用Spring Security的入門者。
spring-boot-starter-web-services:使用Spring Web服務的初學者。
spring-boot-starter-thymeleaf:使用Thymeleaf檢視的Spring MVC的初學者。
spring-boot-starter-freemarker:使用FreeMarker檢視啟動Spring MVC。
spring-boot-starter-test:單元測試和整合測試,預設引用。
spring-boot-starter-jdbc: 傳統 JDBC
spring-boot-starter-hateoas: 增加 HATEOAS 特性到服務。
spring-boot-starter-security: 使用spring安全實現驗證和授權。
spring-boot-starter-data-jpa: Spring Data JPA Hibernate支援
spring-boot-starter-cache: 啟用 Spring Framework的快取支援
這些啟動器需要配置在maven的pom.xml中,執行時這些包jar在classpath類路徑中就會被載入。下面是標準的pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.concretepage</groupId> <artifactId>spring-boot-app</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-boot-app</name> <description>Spring Boot Application</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> </parent> <properties> <java.version>9</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> <p class="indent"> |
可以透過https://start.spring.io選擇元件方式,或透過Idea等開發工具Spring導航選擇元件,就會自動生成這個pom.xml檔案。
下面介紹幾個常用的Starter:
Web
以前開發REST服務可能需要手工在pom.xml加入像Spring MVC,Tomcat和Jackson這些庫的依賴項,Spring Boot啟動器只要新增一個依賴項就可以了:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <p class="indent"> |
現在我們可以建立一個REST控制器:
@RestController public class GenericEntityController { private List<GenericEntity> entityList = new ArrayList<>(); @RequestMapping("/entity/all") public List<GenericEntity> findAll() { return entityList; } @RequestMapping(value = "/entity", method = RequestMethod.POST) public GenericEntity addEntity(GenericEntity entity) { entityList.add(entity); return entity; } @RequestMapping("/entity/findby/{id}") public GenericEntity findById(@PathVariable Long id) { return entityList.stream(). filter(entity -> entity.getId().equals(id)). findFirst().get(); } } <p class="indent"> |
GenericEntity是一個簡單的bean,有一個ID型別的欄位和字串。
啟動這個應用程式執行時,訪問http:// localhost:8080/entity/all
測試
為了測試,我們通常使用以下一組庫:Spring Test,JUnit,Hamcrest和Mockito。我們可以手動包含所有這些庫,但可以使用Spring Boot starter以下列方式自動包含這些庫:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <p class="indent"> |
無需指定版本號。Spring Boot將自己確定要使用的版本 - 你需要指定的是spring-boot-starter-parent版本即可的版本。如果以後需要升級Boot庫和依賴項,只需在一個地方升級Boot版本,Spring Boot將負責其餘的工作。
有兩種方法可以測試REST控制器:
1.使用模擬環境
2.使用嵌入式Servlet容器(如Tomcat或Jetty)
下面使用使用模擬環境:
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration public class SpringBootApplicationIntegrationTest { @Autowired private WebApplicationContext webApplicationContext; private MockMvc mockMvc; @Before public void setupMockMvc() { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @Test public void givenRequestHasBeenMade_whenMeetsAllOfGivenConditions_thenCorrect() throws Exception { MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); mockMvc.perform(MockMvcRequestBuilders.get("/entity/all")). andExpect(MockMvcResultMatchers.status().isOk()). andExpect(MockMvcResultMatchers.content().contentType(contentType)). andExpect(jsonPath("$", hasSize(4))); } } <p class="indent"> |
重要的是:@WebAppConfiguration註釋和MockMVC是spring-test模組的一部分,hasSize是一個Hamcrest匹配器,而@Before是一個JUnit註釋。這些都可以透過匯入這一個啟動器依賴項來獲得。
JPA
大多數Web應用程式都具有某種資料庫訪問 - 通常是JPA:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <p class="indent"> |
請注意,Springboot開箱即用特性可以至少自動支援以下資料庫:H2,Derby和Hsqldb。在我們的例子中,我們將使用H2。
為我們的實體建立儲存庫:
public interface GenericEntityRepository extends JpaRepository<GenericEntity, Long> {} <p class="indent"> |
這裡沒有指定資料庫供應商,URL連線和使用者名稱密碼。這些不需要額外的配置,因為我們從可靠的Boot預設值中受益; 但當然,如使用MySQL Oracle等資料庫需要在application.propertie或yaml中配置所有這些細節。這些配置都是外部化的。
相關文章
- Spring Boot Starters啟動器Spring Boot
- 什麼是Spring Boot?Spring Boot
- 什麼是Spring Boot?為什麼要學習Spring Boot?Spring Boot
- Spring Boot與Spring Cloud是什麼關係?Spring BootCloud
- Spring boot與Spring cloud 是什麼關係?Spring BootCloud
- spring boot與spring mvc的區別是什麼?Spring BootMVC
- 你一直在用的 Spring Boot Starters 究竟是怎麼回事Spring Boot
- 面試官:什麼是 YAML?和 Spring Boot 有什麼關係?面試YAMLSpring Boot
- Spring Boot 為什麼這麼火?Spring Boot
- Spring 是什麼?Spring
- Boot Camp是什麼以及如何使用boot
- 一個吃貨來說明Spring Boot與Spring cloud 是什麼關係Spring BootCloud
- 什麼是Spring Data?Spring
- 什麼是Spring Framework 框架?SpringFramework框架
- 什麼是 Spring AOT 引擎?Spring
- 有了 Spring 為什麼還要弄個 Spring BootSpring Boot
- Spring認證_什麼是Spring GraphQL?Spring
- Spring認證_什麼是Spring Security?Spring
- Spring認證_什麼是Spring GraphQLSpring
- 「Spring認證」什麼是Spring GraphQL?Spring
- Spring Aware 到底是什麼?Spring
- spring中FactoryBean是什麼beanSpringBean
- Spring IoC 到底是什麼Spring
- Spring Boot 2.2中有什麼新功能? - oioSpring Boot
- Spring Boot中Tomcat是怎麼啟動的Spring BootTomcat
- 為什麼Java大神,都在看Spring Boot和Spring Cloud的書?JavaSpring BootCloud
- Spring原始碼剖析開篇:什麼是Spring?Spring原始碼
- 什麼是 Spring Cloud 資料流?SpringCloud
- Java 9 和Spring Boot 2.0紛紛宣佈支援的HTTP/2到底是什麼?JavaSpring BootHTTP
- 什麼是Spring 框架?Spring 框架有哪些主要模組?Spring框架
- Flowable 6.6.0 BPMN使用者指南 - (5)Spring Boot - 5.9 Flowable Auto-configuration類 5.10 Flowable StartersSpring Boot
- 為什麼越來越多的開發者選擇使用Spring Boot?Spring Boot
- Spring Boot 到底是怎麼執行的,你知道嗎?Spring Boot
- Spring Boot到底是怎麼執行的,你知道嗎?Spring Boot
- 【面試普通人VS高手系列】Spring Boot的約定優於配置,你的理解是什麼?面試Spring Boot
- 什麼是cookie,什麼是sessionCookieSession
- 什麼是DNS,什麼是HostsDNS
- 什麼是模式? 什麼是框架?模式框架