springboot学习(六): 创建自定义的springboot starter

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36553913/article/details/82822149

说明

在学习中,希望能创建自己的依赖,让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

猜你喜欢

转载自blog.csdn.net/sinat_36553913/article/details/82822149
今日推荐