Spring Boot 自定義starter的示例代碼
SpringBoot 個人感覺特點:
1)眾多庫的集合(各種Starter),方便快速構(gòu)建應(yīng)用系統(tǒng)。
2)自動配置spring(通過AutoConfiguration機(jī)制),簡化配置,也方便擴(kuò)展新的Starter。
3)內(nèi)嵌web容器,無需WAR部署。
創(chuàng)建一個用maven構(gòu)建的springboot項目
pom文件配置如下:
<?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.xjw.springboot</groupId> <artifactId>hellostarter</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>hello-spring-boot-starter</name> <description>測試自定義starter</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
定義一個pojo用來接收properties中配置的信息
package com.xjw; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "hello") public class HelloServiceProperteis { private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
@ConfigurationProperties:用來標(biāo)識這個pojo是一個用來接收指定前綴的資源配置值
prefix:表示在配置文件中配置項前綴[/code]
編寫一個Service用來對外提供服務(wù)
package com.xjw; public class HelloService { private String msg; public String sayHello() { return "Hello " + msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
配置一個pojo用來讀取上面配置的HelloServiceProperteis
package com.xjw; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(value = HelloServiceProperteis.class) @ConditionalOnClass(HelloService.class) @ConditionalOnProperty(prefix = "hello", value = "enable", matchIfMissing = true) public class HelloAutoConfiguration { @Autowired private HelloServiceProperteis helloServiceProperteis; @Bean @ConditionalOnMissingBean(HelloService.class) public HelloService helloService() { HelloService helloService = new HelloService(); helloService.setMsg(helloServiceProperteis.getMsg()); return helloService; } }
@Configuration:標(biāo)識此類為一個spring配置類
@EnableConfigurationProperties(value = HelloServiceProperteis.class):啟動配置文件,value用來指定我們要啟用的配置類,可以有多個,多個時我們可以這么寫value={xxProperties1.class,xxProperteis2.class....}
@ConditionalOnClass(HelloService.class):表示當(dāng)classPath下存在HelloService.class文件時改配置文件類才有效
@ConditionalOnProperty(prefix = "hello", value = "enable", matchIfMissing = true):表示只有我們的配置文件是否配置了以hello為前綴的資源項值,并且在該資源項值為enable,如果沒有配置我們默認(rèn)設(shè)置為enable[/code]
最后在src/main/resources 文件夾下新建文件夾 META-INF,在新建的META-INF文件夾下新建spring.factories
在新建的spring.factories文件中配置自動啟動類為我們之前編寫的HelloAutoConfiguration 類
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xjw.HelloAutoConfiguration
然后就可以在其他的spring-boot項目中使用我們剛剛新建的starter了,我們來測試一下
在新建一個spring-boot項目,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.xjw.springboot</groupId> <artifactId>hellostarter.test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>hello-spring-boot-starter-test</name> <description>測試自定義starter</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</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-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.xjw.springboot</groupId> <artifactId>hellostarter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
然后我們直接在咋們的啟動類中中嘗試使用以下我們上面定義的starter提供的HelloService:
package com.xjw; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SpringBootApplication public class HelloSpringBootStarterTestApplication { @Autowired private HelloService helloService; @RequestMapping("/") public String index() { return helloService.sayHello(); } public static void main(String[] args) { SpringApplication.run(HelloSpringBootStarterTestApplication.class, args); } }
接著我們修改測試項目中的application.properteis,加入如下配置:
debug=true server.port=8888 #hello=enable hello.msg=測試starter
最后啟動項目,觀察控制臺輸出的內(nèi)容中依賴的starter,從Positive matches下我們可以看到有這么一句:
HelloAutoConfiguration matched:
- @ConditionalOnClass found required class 'com.xjw.HelloService'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnProperty (hello.enable) matched (OnPropertyCondition)
或者我們打開項目依賴樹也能找到我們的starter ,這說明spring已經(jīng)自動的啟動了我們的starter了,打開瀏覽器輸入地址:http://localhost:8888/將會看到如下結(jié)果
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring boot創(chuàng)建自定義starter的完整步驟
- spring boot 自定義starter的實現(xiàn)教程
- spring boot微服務(wù)自定義starter原理詳解
- springboot自定義Starter的具體流程
- springboot自定義starter實現(xiàn)過程圖解
- SpringBoot自定義starter實例代碼
- springboot自定義Starter過程解析
- springboot自定義redis-starter的實現(xiàn)
- SpringBoot自動配置之自定義starter的實現(xiàn)代碼
- 使用SpringBoot自定義starter的完整步驟
相關(guān)文章
Java中使用MyBatis-Plus操作數(shù)據(jù)庫的實例
本文主要介紹了Java中使用MyBatis-Plus操作數(shù)據(jù)庫的實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02教你利用JAVA實現(xiàn)可以自行關(guān)閉服務(wù)器的方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著利用JAVA實現(xiàn)可以自行關(guān)閉服務(wù)器的方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06String與Blob互轉(zhuǎn)和file文件與Blob互轉(zhuǎn)方式
這篇文章主要介紹了String與Blob互轉(zhuǎn)和file文件與Blob互轉(zhuǎn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05java(包括springboot)讀取resources下文件方式實現(xiàn)
這篇文章主要介紹了java(包括springboot)讀取resources下文件方式實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09關(guān)于SpringCloud的Bus消息總線圖文詳解
這篇文章主要介紹了關(guān)于SpringCloud的Bus消息總線圖文詳解,Spring Cloud Bus是用來將分布式系統(tǒng)的節(jié)點與輕量級消息系統(tǒng)鏈接起來的框架,它整合了Java的事件處理機(jī)制和消息中間件的功能,需要的朋友可以參考下2023-05-05mybatis?實現(xiàn)多層級collection嵌套
這篇文章主要介紹了mybatis?實現(xiàn)多層級collection嵌套,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03