# starter-learn **Repository Path**: fqfa1226/starter-learn ## Basic Information - **Project Name**: starter-learn - **Description**: 通过一个完整的实例学习自定义springboot-starter的项目 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-04-22 - **Last Updated**: 2022-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 通过一个完整的实例学习自定义springboot-starter **前言:** > 在我们日常的开发过程中,使用第三方的组件比如Redis、OSS、Shiro、Swagger等等,有的只需要在配置文件里添加一些配置就能使用该组件了,是因为这些组件已经封装了starter了,而有的需要我们通过代码编写一些配置Bean才能使用,这样接入比较复杂。 特别是我们需要封装一些组件给其他服务调用,如果我们提供starter对方接入就变得简单了,只需要在配置文件里加上配置就能自动装配好服务配置了。 ---------------- **模块说明:** + server 需要自动装配的模块,相当于我们引用的第三方服务包 + server-starter 自定义的starter模块,这个模块依赖server模块,实际使用时就是引入这个模块jar包 + web 使用starter的模块,这个模块引入server-starter模块,相当于我们自己的项目 **关键代码:** server的TestConfig需要自动装配,同时还能装配TestConfigServe ```text TestConfig、TestConfigServe ``` - **自定义starter:** 1. server-starter pom.xml ```xml com.fay server 0.0.1-SNAPSHOT org.springframework.boot spring-boot-configuration-processor 2.4.2 true org.springframework.boot spring-boot-autoconfigure 2.4.2 ``` 2. server-starter 配置类 ConfigProperties ```java @Data @ConfigurationProperties("learn") public class ConfigProperties { private boolean enable; private String id; private String name; public ConfigProperties() { this.enable = false; } } ``` 3. server-starter 装配类 TestConfigConfiguration ```java @Configuration @ConditionalOnClass(TestConfig.class) @EnableConfigurationProperties(ConfigProperties.class) @ConditionalOnProperty(prefix = "learn", name = "enable", havingValue = "true", matchIfMissing = true) public class TestConfigConfiguration { @Resource private ConfigProperties configProperties; /** 装配 TestConfig */ @Bean @ConditionalOnMissingBean(TestConfig.class) public TestConfig config() { TestConfig testConfig = new TestConfig(); testConfig.setId(configProperties.getId()); testConfig.setName(configProperties.getName()); return testConfig; } /**装配 TestConfigServe */ @Bean @ConditionalOnMissingBean(TestConfigServe.class) public TestConfigServe serve() { return new TestConfigServe(this.config()); } } ``` 3. server-starter resources/META-INF下的factories ```lombok.config org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.fay.learn.config.TestConfigConfiguration ``` 4. resources/META-INF下的配置提示(非必要,配置了之后web使用时可以提示配置) ```json { "properties": [ { "name": "test.id", "type": "java.lang.String", "description": "配置ID." },{ "name": "test.name", "type": "java.lang.String", "description": "配置名称." },{ "name": "test.enable", "type": "java.lang.Boolean", "description": "配置开关.", "defaultValue": false } ] } ``` - **web模块使用server模块:** 1. web pom.xml引入server-starter ```xml com.fay server-starter 0.0.1-SNAPSHOT ``` 2. web application.yml,配置文件添加配置即可 ```yaml learn: id: learn name: 齐天大圣 enable: true ``` 3. 启动web的服务,访问TestController下的接口验证装配是否成功。