1. 程式人生 > >springboot學習(六): 建立自定義的springboot starter

springboot學習(六): 建立自定義的springboot starter

說明

在學習中,希望能建立自己的依賴,讓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>