如何手写一个简单的 Spring Boot Starter

发布于:2021-03-01 15:57:50

0

2739

0

Spring Boot
# 如何手写一个简单的 Spring Boot Starter

我们今天演示如何手写一个简单的 `Spring Boot Starter`,这里就使用 `Redisson` 为例演示吧。

## 一、创建项目、添加依赖

因为是写 `Redisson` 的例子,需要引入 `Redisson` `Spring Boot` 的依赖

```xml
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter</artifactId>
           <version>2.4.2</version>
       </dependency>

       <dependency>
           <groupId>org.redisson</groupId>
           <artifactId>redisson</artifactId>
           <version>3.11.1</version>
       </dependency>
```

## 二、定义属性类

这里就定义了连接 `Redis` 的地址、端口、密码等信息:

```java
@ConfigurationProperties(prefix = "gp.redisson")
public class RedissonProperties {

   private String host = "localhost";
   private String password;
   private int port = 6379;
   private int timeout;
   private boolean ssl;

   public String getHost() {
       return host;
   }

   public void setHost(String host) {
       this.host = host;
   }

   public String getPassword() {
       return password;
   }

   public void setPassword(String password) {
       this.password = password;
   }

   public int getPort() {
       return port;
   }

   public void setPort(int port) {
       this.port = port;
   }

   public int getTimeout() {
       return timeout;
   }

   public void setTimeout(int timeout) {
       this.timeout = timeout;
   }

   public boolean isSsl() {
       return ssl;
   }

   public void setSsl(boolean ssl) {
       this.ssl = ssl;
   }
}
```

## 三、定义配置类

配置类里面通过读取配置,实例化出来 `RedissonClient` 对象:

```java
@Configuration
@ConditionalOnClass(Redisson.class)
@EnableConfigurationProperties(RedissonProperties.class)
public class RedissonAutoConfiguration {

   @Bean
   public RedissonClient redissonClient(RedissonProperties redissonProperties) {
       Config config = new Config();
       String prefix = "redis://";
       if (redissonProperties.isSsl()) {
           prefix = "rediss://";
       }

       SingleServerConfig singleServerConfig = config.useSingleServer()
               .setAddress(prefix + redissonProperties.getHost() + ":" + redissonProperties.getPort())
               .setConnectTimeout(redissonProperties.getTimeout());

       if (StringUtils.hasLength(redissonProperties.getPassword())) {
           singleServerConfig.setPassword(redissonProperties.getPassword());
       }

       return Redisson.create(config);
   }

}
```

## 四、创建资源文件

最后需要在 `resources` 目录下创建 `META-INF/spring.factories` 文件,指定 `Spring Boot` 扫描到我们创建的 `RedissonAutoConfiguration` 类,从而实例化 `RedissonClient`

```properties
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jerry.redis.RedissonAutoConfiguration
```

## 五、如何使用

在其它项目中如果需要使用我们自定义的 `Starter`,只需要添加依赖:

```xml
       <dependency>
           <groupId>com.jerry</groupId>
           <artifactId>redis-spring-boot-starter</artifactId>
           <version>1.0-SNAPSHOT</version>
       </dependency>
```

然后在配置文件中配置 `Redis` 的连接信息:

```yaml
gp:
 redisson:
   host: localhost
   port: 6379
```

最后就可以愉快的使用 `RedissonClient` 对象了。