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

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

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

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

需求:自定義redis-starter,要求當(dāng)導(dǎo)入redis坐標(biāo)后,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,該屬性配置類從配置文件獲取屬性值,并設(shè)置host、port屬性的默認(rèn)值,如下:

/**
 * @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工程坐標(biāo)。

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

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

 <!--引入自定義的起步依賴-->
  <dependency>
   <groupId>com.winson</groupId>
   <artifactId>redis-spring-boot-starter</artifactId>
   <version>0.0.1-SNAPSHOT</version>
  </dependency>
//引導(dǎo)類
@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);
 }
}

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

下面進(jìn)行redis測試

一、首先啟動本機(jī)的redis服務(wù)

二、根據(jù)測試,修改引導(dǎo)類,向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);
 }
}

三、啟動程序,測試結(jié)果,也成功。

下面測試修改redis連接信息,測試結(jié)果

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

redis:
 host: 127.0.0.1
 port: 6666

二、啟動程序,測試結(jié)果:發(fā)現(xiàn)無法再連接到redis服務(wù)器了,說明我們設(shè)置的屬性配置類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());
 }
}

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

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

相關(guān)文章

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

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

    今天給大家?guī)淼氖荍ava的相關(guān)知識,文章圍繞著如何用Java做一個定時提醒工具展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    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搭建搜索服務(wù)的坑

    springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務(wù)的坑

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

    Java超詳細(xì)分析垃圾回收機(jī)制

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

    SpringBoot自動配置原理詳解

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

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

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

    Jedis零基礎(chǔ)入門及操作Redis中的數(shù)據(jù)結(jié)構(gòu)詳解

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

    Java基礎(chǔ)之代理原理與用法詳解

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

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

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

最新評論

建瓯市| 襄垣县| 雅江县| 邹平县| 鄂托克前旗| 敦煌市| 报价| 永顺县| 桦南县| 内江市| 泾川县| 榕江县| 呼玛县| 壤塘县| 洪江市| 甘孜县| 绥德县| 嘉峪关市| 江阴市| 德阳市| 桦川县| 唐山市| 平乐县| 江北区| 太仓市| 临湘市| 大安市| 项城市| 舞钢市| 五河县| 沙坪坝区| 翼城县| 东安县| 齐河县| 天门市| 祁东县| 木兰县| 凉城县| 枣阳市| 沙田区| 合山市|