最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot自動配置之自定義starter的實現(xiàn)代碼

 更新時間:2020年10月17日 09:36:55   作者:溫森  
這篇文章主要介紹了SpringBoot自動配置之自定義starter的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言:前面已經(jīng)介紹了自動配置的很多原理,現(xiàn)在我們著手自己定義一個starter。

需求:自定義redis-starter,要求當導入redis坐標后,SpringBoot自動創(chuàng)建Jedis的Bean。正式開始之前,我們可以查看Mybatis的起步依賴是如果實現(xiàn)自動配置的。我這里就省略了,大家根據(jù)之前的分析文章,自己看源碼即可。

一、先創(chuàng)建一個SpringBoot工程redis-spring-boot-autoconfigure,該工程中添加jedis依賴,并且創(chuàng)建一個自動配置類RedisAutoConfigure,實現(xiàn)jedis實例(bean)注入到IOC容器中。

/**
 * @description:自定義自動配置類:將Jedis注入到IOC容器中
 * @date: 2020/10/10 15:08
 * @author: winson
 */
@Configuration
@EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfigure {

 /**
  * 提供jedis的bean
  * @param redisProperties
  * @return
  */
 @Bean
 public Jedis jedis(RedisProperties redisProperties) {
  return new Jedis(redisProperties.getHost(), redisProperties.getPort());
 }

}

考慮到redis的有兩個參數(shù)(host、port)必須是可以動態(tài)賦值的,所以我們自定義一個屬性配置類RedisProperties,該屬性配置類從配置文件獲取屬性值,并設置host、port屬性的默認值,如下:

/**
 * @description:自定義屬性配置類
 * @date: 2020/10/10 15:11
 * @author: winson
 */
@ConfigurationProperties(prefix = "redis")
public class RedisProperties {

 private String host = "127.0.0.1";

 private int port = 6379;

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

@EnableConfigurationProperties注解的作用:由于自動配置類RedisAutoConfigure中,注冊jedis的bean中參數(shù)需要使用到RedisProperties的bean,但無法獲取到RedisProperties的bean,所以我們可以通過這個注解,手動的將該bean注入到IOC容器中。

在resources目錄下按照SpringBoot自動配置目錄、文件名稱的規(guī)則,如下圖,新建一個自己的spring.factories文件

spring.factories文件內(nèi)容:就是將自定義的自動配置類聲明為名稱為org.springframework.boot.autoconfigure.EnableAutoConfiguration的值,“\”的作用:換行,如果我們有多個自定義的自動配置類,這里可以用逗號分隔。

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.winson.jedis.config.RedisAutoConfigure

二、再創(chuàng)建一個SpringBoot工程redis-spring-boot-starter,引入redis-spring-boot-autoconfigure工程坐標。

<!--引入自定義的redis的starter-->
<dependency>
 <groupId>com.winson</groupId>
 <artifactId>redis-spring-boot-autoconfigure</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</dependency>

三、在測試類中引入自定義的starter,并修改引導類,做測試

 <!--引入自定義的起步依賴-->
  <dependency>
   <groupId>com.winson</groupId>
   <artifactId>redis-spring-boot-starter</artifactId>
   <version>0.0.1-SNAPSHOT</version>
  </dependency>
//引導類
@SpringBootApplication
public class SpringbootEnableApplication {
 public static void main(String[] args) {
  ConfigurableApplicationContext context = SpringApplication.run(SpringbootEnableApplication.class, args);

  Jedis jedis = context.getBean(Jedis.class);
  System.out.println(jedis);
 }
}

四、啟動程序,測試結果,自定義stater成功。

下面進行redis測試

一、首先啟動本機的redis服務

二、根據(jù)測試,修改引導類,向redis中存儲數(shù)據(jù),并取值

@SpringBootApplication
public class SpringbootEnableApplication {

 public static void main(String[] args) {
  ConfigurableApplicationContext context = SpringApplication.run(SpringbootEnableApplication.class, args);

  Jedis jedis = context.getBean(Jedis.class);
  jedis.set("username", "dufu");

  String username = jedis.get("username");
  System.out.println("username=" + username);
 }
}

三、啟動程序,測試結果,也成功。

下面測試修改redis連接信息,測試結果

一、測試類中添加redis的配置信息(根據(jù)屬性配置類 RedisProperties 的設置進行定義),將port的連接端口,故意寫錯,如下:

redis:
 host: 127.0.0.1
 port: 6666

二、啟動程序,測試結果:發(fā)現(xiàn)無法再連接到redis服務器了,說明我們設置的屬性配置類RedisProperties 是生效的

三、如果我們將連接信息修改正確,再啟動,也是沒有問題的

最后,我們可以使用Condition將我們自定義的自動配置類完善一下,使用@ConditionalOnClass(Jedis.class)與@ConditionalOnMissingBean(name = "jedis"),具體的釋義,我就不解釋。

/**
 * @description:自定義自動配置類:將Jedis注入到IOC容器中
 * @date: 2020/10/10 15:08
 * @author: winson
 */
@Configuration
@EnableConfigurationProperties(RedisProperties.class)
@ConditionalOnClass(Jedis.class)
public class RedisAutoConfigure {
 /**
  * 提供jedis的bean
  * @param redisProperties
  * @return
  */
 @Bean
 @ConditionalOnMissingBean(name = "jedis")
 public Jedis jedis(RedisProperties redisProperties) {
  return new Jedis(redisProperties.getHost(), redisProperties.getPort());
 }
}

小結:如此,我們并完成了自定義starter的示例

到此這篇關于SpringBoot自動配置之自定義starter的實現(xiàn)代碼的文章就介紹到這了,更多相關SpringBoot自定義starter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 教你用Java Swing做一個定時提醒工具

    教你用Java Swing做一個定時提醒工具

    今天給大家?guī)淼氖荍ava的相關知識,文章圍繞著如何用Java做一個定時提醒工具展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • idea maven 項目src下的配置文件沒有同步至target的解決操作

    idea maven 項目src下的配置文件沒有同步至target的解決操作

    這篇文章主要介紹了idea maven 項目src下的配置文件沒有同步至target的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • @Scheduled 如何讀取動態(tài)配置文件

    @Scheduled 如何讀取動態(tài)配置文件

    這篇文章主要介紹了@Scheduled 如何讀取動態(tài)配置文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務的坑

    springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務的坑

    這篇文章主要介紹了springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務的坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java超詳細分析垃圾回收機制

    Java超詳細分析垃圾回收機制

    一個運行中的程序,?產(chǎn)生的對象是大量的,?如果對象不被繼續(xù)使用,?就會成為垃圾,?最后越堆越多,?最后占滿內(nèi)存,?所以我們要對這些垃圾進行回收,保持程序的正常運行
    2022-05-05
  • SpringBoot自動配置原理詳解

    SpringBoot自動配置原理詳解

    SpringBoot的誕生就是為了簡化Spring中繁瑣的XML配置,其本質(zhì)依然還是Spring框架,使用SpringBoot之后可以不使用任何XML配置來啟動一個服務,使得我們在使用微服務架構時可以更加快速的建立一個應用。本文將為具體介紹一下SpringBoot的原理,需要的可以參考一下
    2021-12-12
  • Java中的ArrayList.trimToSize()方法詳解

    Java中的ArrayList.trimToSize()方法詳解

    這篇文章主要介紹了Java中的ArrayList.trimToSize()方法詳解,前幾天看了Java?ArrayList,沒有明白trimToSize()這個方法是什么意思,所以看了一下源碼并且debug一下自己的一個例子,明白了其中的含義,需要的朋友可以參考下
    2023-11-11
  • Jedis零基礎入門及操作Redis中的數(shù)據(jù)結構詳解

    Jedis零基礎入門及操作Redis中的數(shù)據(jù)結構詳解

    Jedis 的 API 方法跟 Redis 的命令基本上完全一致,熟悉 Redis 的操作命令,自然就很容易使用 Jedis,因此官方也推薦 Java 使用 Jedis 來連接和操作 Redis
    2022-09-09
  • Java基礎之代理原理與用法詳解

    Java基礎之代理原理與用法詳解

    這篇文章主要介紹了Java基礎之代理原理與用法,結合實例形式詳細分析了java代理的概念、原理、用法及相關操作注意事項,需要的朋友可以參考下
    2020-02-02
  • Spring boot工具類靜態(tài)屬性注入及多環(huán)境配置詳解

    Spring boot工具類靜態(tài)屬性注入及多環(huán)境配置詳解

    這篇文章主要為大家詳細介紹了Spring boot工具類靜態(tài)屬性注入,及多環(huán)境配置詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評論

陆良县| 潞城市| 工布江达县| 东辽县| 山东省| 区。| 酒泉市| 台中县| 上犹县| 庆城县| 江津市| 全南县| 家居| 元阳县| 荣昌县| 泰州市| 浪卡子县| 广河县| 盐城市| 育儿| 潢川县| 岳阳市| 南和县| 防城港市| 调兵山市| 浦东新区| 绿春县| 商都县| 新乡县| 荥经县| 桓仁| 扶沟县| 宜昌市| 裕民县| 临江市| 栾川县| 沁阳市| 东方市| 柳州市| 蓝田县| 平利县|