说明
在学习中,希望能创建自己的依赖,让springboot通过<dependency>引用。springboot提供了starter来引用,所以通过创建自定义的starter来实现。有关springboot starter的知识详见Spring Boot Starters
正文
创建自定义的starter,有两个重要的部分,一个是resources/META-INF/spring.factories文件,在springboot启动时通过扫描该文件来自动加载配置类。另一个是**AutoConfigure类,这个类就是自动配置类,在springboot启动时被自动加载配置。
在本文中,通过创建一个rediscofig starter来实现redis的配置。
1.创建Maven项目
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.0.3.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
spring-boot-configuration-processor这个依赖可以为配置属性生成元数据,IDE可以自动感知。
spring-boot-autoconfigure这个依赖可以允许我们使用适当的注释来创建配置类。
2.创建RedisProperties
@ConfigurationProperties(prefix = "redis.msg")
public class RedisProperties {
private String host;
private int port;
private int timeout;
// Getters + Setters
}
3.创建RedisConfig
public class RedisConfig {
private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);
private RedisProperties redisProperties;
public RedisConfig(){}
public RedisConfig(RedisProperties redisProperties){
this.redisProperties = redisProperties;
}
@PostConstruct
private void init(){
logger.info(String.format("Init Config -- host : %s, port : %d, timeout : %d %n",redisProperties.getHost(),redisProperties.getPort(),redisProperties.getTimeout()));
}
}
4.创建RedisAutoConfigure
@Configuration
@ConditionalOnClass(RedisConfig.class)
@EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfigure {
@Autowired
private RedisProperties redisProperties;
@Bean
@ConditionalOnMissingBean
public RedisConfig redisConfig(){
return new RedisConfig(redisProperties);
}
}
有关注解:
@ConditionalOnClass 当在classpath发现指定类时进行自动配置
@ConditionalOnMissingBean 当spring context不存在该bean时进行配置
@ConditionalOnProperty 当指定的属性有指定的值使进行配置
5.创建spring.factories
在resources目录下创建META-INF目录,在该目录下创建文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.wds.redis.RedisAutoConfigure
6.发布引用
使用mvn命令安装到本地的maven仓库
mvn clean install
新建一个springboot项目引入依赖
<dependency>
<groupId>com.wds</groupId>
<artifactId>redis.config.starter</artifactId>
<version>1.0.0</version>
</dependency>
源码地址:https://github.com/Edenwds/springboot_study/tree/master/build_starter
参考资料:
https://www.nosuchfield.com/2017/10/15/Spring-Boot-Starters/
https://www.cnblogs.com/yuansc/p/9088212.html
https://g00glen00b.be/writing-spring-boot-starter/
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html