springboot starter自定義實現公共模塊方式
SpringBoot中的starter是一種非常重要的機制,能夠拋棄以前繁雜的配置,將其統一集成進starter,應用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應的默認配置。
我們將可獨立于業(yè)務代碼之外的功配置模塊封裝成一個個starter,復用的時候只需要將其在pom中引用依賴即可,SpringBoot為我們完成自動裝配。
比如登錄模塊,基于aop的日志模塊等。
SpringBoot提供的starter以spring-boot-starter-xxx
的方式命名的。官方建議自定義的starter使用xxx-spring-boot-starter
命名規(guī)則。以區(qū)分SpringBoot生態(tài)提供的starter。
以下是定義一個starter的步驟:
1. 建立一個父項目
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.9.RELEASE</version> </parent> <groupId>org.example</groupId> <artifactId>springboot-starter-demo</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>springboot-starter-config</module> <module>springboot-starter-application</module> </modules> <packaging>pom</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
2. 新建一個maven module項目作為自定義starter項目
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"> <parent> <artifactId>springboot-starter-demo</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springboot-starter-config</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> </project>
3. 定義屬性類
package com.demo; import org.springframework.boot.context.properties.ConfigurationProperties; /** * 描述:配置信息 實體 * **/ @ConfigurationProperties(prefix = "demo") public class DemoProperties { private String params1; private String params2; private Integer minLength; public String getParams1() { return params1; } public void setParams1(String params1) { this.params1 = params1; } public String getParams2() { return params2; } public void setParams2(String params2) { this.params2 = params2; } public Integer getMinLength() { return minLength; } public void setMinLength(Integer minLength) { this.minLength = minLength; } }
4. 定義服務類
package com.demo.service; import com.demo.DemoProperties; import org.springframework.beans.factory.annotation.Autowired; /** * author:HUAWEI */ public class DemoService { @Autowired private DemoProperties demoProperties; public String params1; public String params2; public DemoService(String param1, String param2) { this.params1 = param1; this.params2 = param2; } public String paramsInfo() { return this.params1 + "! " + params2; } public boolean isValidLength(String param) { int length = param.length(); Integer minLength = demoProperties.getMinLength(); if (length < minLength.intValue()) { return false; } else { return true; } } }
5. 定義配置類
package com.demo; import com.demo.service.DemoService; import org.springframework.beans.factory.annotation.Autowired; 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(DemoProperties.class) @ConditionalOnProperty( prefix = "demo", name = "enable", havingValue = "true" ) public class DemoStarterAutoConfig { @Autowired private DemoProperties demoProperties; @Bean(name = "demo") public DemoService demoService(){ return new DemoService(demoProperties.getParams1(), demoProperties.getParams2()); } }
6. 重要的一步
resource目錄下添加META-INF目錄,在其下面建立文件spring.factories,內容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.demo.DemoStarterAutoConfig
經過以上步驟,starter就完成了。
以下是建立測試項目的步驟。
7. 建立maven module測試項目
<?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"> <parent> <artifactId>springboot-starter-demo</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springboot-starter-application</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.example</groupId> <artifactId>springboot-starter-config</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
8. 添加配置文件application.yml
server: port: 8010 demo: enable: true params1: 參數1 params2: 參數2 minLength: 4
9. 添加測試controller
package com.demo.starter.controller; import com.demo.service.DemoService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController public class AppController { @Resource(name = "demo") private DemoService demoService; @GetMapping("/test") public String test(){ boolean valid = demoService.isValidLength("test"); if(valid) return demoService.paramsInfo(); else return "無效數據"; } }
10. 打開瀏覽器,執(zhí)行測試
自此完成了starter的基本測試。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java線程編程中isAlive()和join()的使用詳解
這篇文章主要介紹了Java線程編程中isAlive()和join()的使用詳解,是Java入門學習中的基礎知識,需要的朋友可以參考下2015-09-09詳解Reactor如何優(yōu)雅Exception異常處理
初識響應式編程的時候,除了從命令式的思維方式轉變?yōu)楹瘮凳降木幊谭绞酵?,其中有一個很大的不適應的地方就是在面對異常時該怎么處理。本文將通過Project?Reactor的文檔以及源碼來深入解讀,在reactor中是如何優(yōu)雅地實現這異常處理三板斧,希望對大家有所幫助2023-02-02