使用Spring Boot 编写一个starter

前面我们介绍了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依赖如下:

<dependency>
   <groupId>org.redisson</groupId>
   <artifactId>redisson</artifactId>
   <version>3.13.6</version>
</dependency>  

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

@ConfigurationProperties(prefix = "microservice.redis")
public class RedissonProperties {
    private String host="localhost";
    private int port = 379;
    private String password;
    private int timeout;
    private boolean ssl;
    //setter getter方法省略
}

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

@Configuration
@ConditionalOnClass(Redisson.class)
@EnableConfigurationProperties(RedissonProperties.class)
public class RedissonAutoConfiguration {
    @Bean
    public RedissonClient redisonClient(RedissonProperties redissonProperties) {
        Config config = new Config();
        String prefix = "redis://";
        if (redissonProperties.isSsl()) {
            prefix = "rediss://";
        }
        config.useSingleServer()
                .setAddress(prefix + redissonProperties.getHost() + ":" + redissonProperties.getPort())
                .setConnectTimeout(redissonProperties.getTimeout())
                .setPassword(redissonProperties.getPassword());
        return Redisson.create(config);
    }
}

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

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

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

<dependency>
    <groupId>cn.org.microservice</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

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

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

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

猜你喜欢

转载自blog.csdn.net/wk19920726/article/details/109104750
今日推荐