掌握了SpringBoot的自動裝配原理後你會發現自定義Starter也是非常容易的哦! 手寫SpringBoot Starter組件

在實際項目中我們需要手動來手寫Starter組件的場景相對來說還是比較少的,但是對於自定義Starter組件的原理大家還是需要掌握清楚,第一個是增加自己的自信心,第二個是掌握的自動裝配的原理後Starter組件的實現其實就是非常簡單的事情了。我們通過Redis的客戶端程序來給大家介紹。對於Redis服務我們可以使用的Java客戶端還是比較多的,但是在SpringBoot項目中我們怎麼來使用呢?

手寫SpringBoot Starter組件

1.自定義Starter

創建一個普通的Maven項目,名稱爲redisson-spring-boot-starter,命名要注意,第三方starter約定是 xxxx+spring-boot-starter.

添加相關的依賴

    <dependencies>
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.15.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.4.8</version>
            <optional>true</optional>
        </dependency>
    </dependencies>

添加屬性類

/**
 * 定義屬性類
 *    指定前綴爲 bobo.redisson
 */
@ConfigurationProperties(prefix = "bobo.redisson")
public class RedissonProperties {

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

    public String getHost() {
        return host;
    }

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

    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;
    }
}

然後創建對應的配置類。

@ConditionalOnClass(Redisson.class) // 條件裝配
// 關聯 屬性配置類
@EnableConfigurationProperties(RedissonProperties.class)
@Configuration
public class RedissonAutoConfiguration {

    @Bean
    public RedissonClient redissonClient(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());
        return Redisson.create(config);
    }

}

這樣我們的自定義Starter的功能就差不多了,然後是要創建spring.factories文件。來實現和SpringBoot項目的自動裝配。

最後爲了增加在添加屬性文件的時候有提示信息。我們可以先導入依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.4.8</version>
        </dependency>

然後添加json文件,名稱必須爲additional-spring-configuration-metadata.json

{
  "properties": [
    {
    "name": "bobo.redisson.host",
      "type": "java.lang.String",
      "description": "Redis的服務器地址",
      "defaultValue": "localhost"
  },{
      "name": "bobo.redisson.port",
      "type": "java.lang.Integer",
      "description": "Redis的服務器端口",
      "defaultValue": 6379
    }
  ]
} 

到這兒就可以了install了,然後就可以使用了。

2.SpringBoot項目使用

自定義Starter項目創建完成後,我們就可以在SpringBoot項目中來使用了。先導入對應的依賴。

然後我們在屬性文件中配置Redis的連接信息,首先可以看到提示信息了

完整的配置信息

# 添加MyBatis 的相關配置信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisdb?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

# 連接池的配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

## 指定映射文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml

## 自定義Start 的屬性配置 Redis 配置
bobo.redisson.host=192.168.100.120
bobo.redisson.port=6379
bobo.redisson.timeout=5000

然後創建控制器測試。

@RestController
public class UserController {

    @Autowired
    private IUserService userService;

    @Autowired
    private RedissonClient redissonClient;

    @GetMapping("/hello")
    public List<User> hello(){
        return userService.query();
    }

    @GetMapping("/query")
    public String query(){
        RBucket<Object> name = redissonClient.getBucket("name");
        if(name.get() == null){
            name.set("BOBO");
        }
        return name.get().toString();
    }

}

啓動服務測試:

看完三件事❤️

如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:

  1. 點贊,轉發,有你們的 『點贊和評論』,纔是我創造的動力。

  2. 關注公衆號 『 java爛豬皮 』,不定期分享原創知識。

  3. 同時可以期待後續文章ing🚀

  4. .關注後回覆【666】掃碼即可獲取學習資料包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章