自定義springboot啟動器

清風綠竹_發表於2020-11-22

場景:

當需要把一些公用的api封裝成jar包時,就可以用springboot自定義啟動器來做

 

原理

springboot自定義啟動器用到的是springboot中的SPI原理,Sringboot會去載入META-INF/spring.factories配置檔案,載入EnableAutoConfiguration 為key的所有類

 

1、自定義啟動器核心工程

spring.factories 配置內容

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xx.jack.start.CustomStarterRun

被 springboot SPI 載入的類CustomStarterRun 

@Configuration
@ConditionalOnClass(CustomTemplate.class)
@EnableConfigurationProperties(RedisConfig.class)
public class CustomStarterRun {

    @Autowired
    private RedisConfig redisConfig;

    @Bean
    public CustomTemplate jackTemplate() {
        CustomTemplate customTemplate = new CustomTemplate(redisConfig);
        return customTemplate;
    }
}

 這個 CustomTemplate 例項就是我們封裝的通用 API,其他工程可以直接匯入 jar使用  ,程式碼如下

public class CustomTemplate<K,V> {

    private Jedis jedis;

    public CustomTemplate(RedisConfig redisConfig) {
        jedis = new Jedis(redisConfig.getHost(),redisConfig.getPort());
    }

    public String put(K k,V v) {

        System.out.println("-------加入快取------");
        System.out.println("key----:"+k);
        System.out.println("value----:"+v);
        final String keyString = k.toString();
        final Object valuef = v;
        final long liveTime = 86400;
        byte[] keyb = keyString.getBytes();
        byte[] valueb = SerializationUtils.serialize((Serializable) valuef);
        return jedis.set(keyb,valueb);
    }

    public Object get(K k) {
        final String keyf = k.toString();
        byte[] key = keyf.getBytes();
        byte[] bytes = jedis.get(key);
        return SerializationUtils.deserialize(bytes);
    }
}


@Data
@ConfigurationProperties(prefix = "spring.redis")
public class RedisConfig {

    private String host;

    private Integer port;
}


 

2、自定義starter

        我們還會定義一個沒程式碼的工程,在這個工程裡只有一個 pom檔案。pom 裡面就是對前面核心工程 jar 包的匯入

 <dependencies>
    <dependency>
      <groupId>com.xx.xx</groupId>
      <artifactId>custom-spring-boot-starter-autoconfigurer</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>

3、自定義啟動器的使用

其實就只有在 springboot 工程 pom 檔案裡面匯入自定義starter依賴就可以了

<dependency>
    <groupId>com.xx.xx</groupId>
    <artifactId>customTemplate-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

 

 

 

相關文章