前面我们介绍了Spring Boot的自动装配原理,对原理了解之后,我们可以编写我们自己Starter包,以便于集成自己的项目,Starter命名主要分为两类,一类为官方命名,一部分为自定义组件命名。为了使得命名更为清晰,一般使用下面的两种约定的方式对Starter组件命名。

    • spring-boot-starter-模块名称,比如spring-boot-starter-web,该方式为官方命名格式
    • 模块名称-spring-boot-starter,比如mybatis-spring-boot-starter,该方式为自定义命名格式

    在了解starter的组件命名格式之后,我们使用一个示例编写自己的starter组件,这里我们编写Redis的redisson组件的starter组件,首先我们创建一个项目redisson-spring-boot-starter,并且添加Redisson依赖如下:

    1. <dependency>
    2. <groupId>org.redisson</groupId>
    3. <artifactId>redisson</artifactId>
    4. <version>3.13.6</version>
    5. </dependency>

    再引入依赖之后,接下来实现在application.properties或者application.yaml配置redis连接所需要的参数,这里只做简单的示例,因此只写一些必须的属性,代码如下:

    1. @ConfigurationProperties(prefix = "microservice.redis")
    2. public class RedissonProperties {
    3. private String host="localhost";
    4. private int port = 379;
    5. private String password;
    6. private int timeout;
    7. private boolean ssl;
    8. //setter getter方法省略
    9. }

    定义需要的属性之后,接下来定义需要自动装配的配置类,该类的主要作用是把RedissonClient自动装配到IOC容器,代码如下所示:

    1. @Configuration
    2. @ConditionalOnClass(Redisson.class)
    3. @EnableConfigurationProperties(RedissonProperties.class)
    4. public class RedissonAutoConfiguration {
    5. @Bean
    6. public RedissonClient redisonClient(RedissonProperties redissonProperties) {
    7. Config config = new Config();
    8. String prefix = "redis://";
    9. if (redissonProperties.isSsl()) {
    10. prefix = "rediss://";
    11. }
    12. config.useSingleServer()
    13. .setAddress(prefix + redissonProperties.getHost() + ":" + redissonProperties.getPort())
    14. .setConnectTimeout(redissonProperties.getTimeout())
    15. .setPassword(redissonProperties.getPassword());
    16. return Redisson.create(config);
    17. }
    18. }

    编写完代码之后,就要告诉Spring去装配这个自动配置,像前面Spring Boot自动装配说的一样,我们需要在META-INF下创建spring.factories文件,然后在该文件中声明要自动装配的配置类,示例如下所示:

    1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    2. cn.org.micorservice.redisson.RedissonAutoConfiguration

    然后在使用Redisson的时候我们只需要引入redisson-spring-boot-starter,即可,maven依赖如下:

    1. <dependency>
    2. <groupId>cn.org.microservice</groupId>
    3. <artifactId>redisson-spring-boot-starter</artifactId>
    4. <version>1.0-SNAPSHOT</version>
    5. </dependency>

    然后在application.properties配置RedissonProperties 中的配置项,示例如下:

    1. microservice.redis.host = 127.0.0.1
    2. microservice.redis.port = 6379

    如上就是简单的自定义简单的Spring Boot Starter组件,我们可以根据需要进行完善,比如Redisson的主备方式的连接,集群方式的连接等等。