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

迅速學(xué)會@ConfigurationProperties的使用操作

 更新時(shí)間:2021年10月08日 09:43:22   作者:工人最光榮  
這篇文章主要介紹了迅速學(xué)會@ConfigurationProperties的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@ConfigurationProperties的使用

@ConfigurationProperties標(biāo)簽可以把.yml文件里的配置讀取到類里

比如,我需要把釘釘小程序的app-key和app-secret放在application.yml文件里面,方便我的配置,那么我們就這樣在application.yml里編寫:

dingding:
  app-key: "dings9oi56464654gfqrfms"
  app-secret: "58786163213546161231321231321aAhbCa8Vw2EVBJiw9_96vd"

現(xiàn)在我們新建一個(gè)類,使用注解

@ConfigurationProperties

來獲得這些值:

@Setter
@Getter
@ConfigurationProperties(prefix = "dingding")
public class AppInfoConfigProperties {
    private String APP_KEY;
    private String APP_SECRET;
}

注意,被 @ConfigurationProperties 修飾的類必須帶有set方法,否則無法獲得配置值。

這樣一來,AppInfoConfigProperties就可以拿到application.yml里的配置,這里的匹配是寬松匹配,寫成

private String appKey;
private String appSecret;

也是可以獲取到值的。

在經(jīng)過以上的步驟后,AppInfoConfigProperties本身并沒有加入容器,也就拿不到他的值,下一步我們把它注冊成一個(gè)Bean:

@EnableConfigurationProperties(AppInfoConfigProperties.class)
@Configuration
public class AppInfoConfig {
    @Autowired
    AppInfoConfigProperties appInfoConfigProperties;
    @Bean("appInfoUtil")
    public AppInfoUtil appInfoUtil(){
        return new AppInfoUtil(appInfoConfigProperties.getAPP_KEY(),appInfoConfigProperties.getAPP_SECRET());
    }
}

這里我們使用了 @EnableConfigurationProperties(AppInfoConfigProperties.class) 來將 AppInfoConfigProperties給注冊到了容器里,同時(shí)通過 @Autowired拿到了它的值。

至此,application.yml文件中的值已被成功獲取到了容器里。

以下是AppInfoUtil 的結(jié)構(gòu):

@Getter
@Setter
@AllArgsConstructor
public class AppInfoUtil {
    private String appKey;
    private String appSecret;
    @Override
    public String toString() {
        return String.format("本小程序的APP-KEY:[%s];本小程序的APP-SECRET:[%s]",this.getAppKey(),this.getAppSecret());
    }
}

為什么不直接使用AppInfoConfigProperties?

原因是因?yàn)锳ppInfoUtil可能會根據(jù)業(yè)務(wù)的需要做出很多的增強(qiáng)功能,所以與配置分離。

注解@ConfigurationProperties使用方法

最近在思考使用java config的方式進(jìn)行配置,java config是指基于java配置的spring。傳統(tǒng)的Spring一般都是基本xml配置的,后來spring3.0新增了許多java config的注解,特別是spring boot,基本都是清一色的java config。

Spring配置方式

第一階段:xml配置

在spring 1.x時(shí)代,使用spring開發(fā)滿眼都是xml配置的bean,隨著項(xiàng)目的擴(kuò)大,

我們需要把xml配置文件分放到不同的配置文件中,那時(shí)候需要頻繁地在開發(fā)的類和配置文件間切換。

第二階段:注解配置

在spring 2.x時(shí)代,隨著JDK1.5帶來的注解支持,spring提供了聲明bean的注解,大大減少了配置量。這時(shí)spring圈子存在一種爭論:注解配置和xml配置究竟哪個(gè)更好?我們最終的選擇是應(yīng)用的基本配置用xml,業(yè)務(wù)配置用戶注解。

第三階段:Java配置(java config)

從spring 3.x到現(xiàn)在,spring提供了Java配置的能力,使用Java配置更好的理解

配置的bean。spring 4.x和spring boot都推薦使用Java配置。

Spring IOC有一個(gè)非常核心的概念——Bean。由Spring容器來負(fù)責(zé)對Bean的實(shí)例化,裝配和管理。XML是用來描述Bean最為流行的配置方式。但隨著Spring的日益發(fā)展,越來越多的人對Spring提出了批評?!癝pring項(xiàng)目大量的爛用XML”就是最為嚴(yán)勵(lì)的一個(gè)批評。由于Spring會把幾乎所有的業(yè)務(wù)類都以Bean的形式配置在XML文件中,造成了大量的XML文件。使用XML來配置Bean失去了編譯時(shí)的類型安全檢查。大量的XML配置使得整個(gè)項(xiàng)目變得更加復(fù)雜。

隨著JAVA EE 5.0的發(fā)布,其中引入了一個(gè)非常重要的特性——Annotations(注釋)。注釋是源代碼的標(biāo)簽,這些標(biāo)簽可以在源代碼層進(jìn)行處理或通過編譯器把它熔入到class文件中。在JAVA EE5以后的版本中,注釋成為了一個(gè)主要的配置選項(xiàng)。Spring使用注釋來描述Bean的配置與采用XML相比,因類注釋是在一個(gè)類源代碼中,可以獲得類型安全檢查的好處??梢粤己玫闹С种貥?gòu)。

JavaConfig就是使用注釋來描述Bean配置的組件。JavaConfig 是Spring的一個(gè)子項(xiàng)目, 比起Spring,它還是一個(gè)非常年青的項(xiàng)目。目前的版本是1.0 M2。使用XML來配置Bean所能實(shí)現(xiàn)的功能,通過JavaConfig同樣可以很好的實(shí)現(xiàn)。

下面具體講一講@ConfigurationProperties使用方法

@ConfigurationProperties

Spring源碼中大量使用了ConfigurationProperties注解,比如server.port就是由該注解獲取到的,通過與其他注解配合使用,能夠?qū)崿F(xiàn)Bean的按需配置。

該注解有一個(gè)prefix屬性,通過指定的前綴,綁定配置文件中的配置,該注解可以放在類上,也可以放在方法上

可以從注解說明中看到,當(dāng)將該注解作用于方法上時(shí),如果想要有效的綁定配置,那么該方法需要有@Bean注解且所屬Class需要有@Configuration注解。

簡單一句話概括就是:Sring的有效運(yùn)行是通過上下文(Bean容器)中Bean的配合完成的,Bean可以簡單理解成對象,有些對象需要指定字段內(nèi)容,那么這些內(nèi)容我們可以通過配置文件進(jìn)行綁定,然后將此Bean歸還給容器

作用于方法

比較常見的就是配置讀寫分離的場景。

配置文件內(nèi)容

#數(shù)據(jù)源
spring.datasource.druid.write.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.druid.write.username=root
spring.datasource.druid.write.password=1
spring.datasource.druid.write.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.read.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.druid.read.username=root
spring.datasource.druid.read.password=1
spring.datasource.druid.read.driver-class-name=com.mysql.jdbc.Driver

java代碼

@Configuration
public class DruidDataSourceConfig {
    /**
     * DataSource 配置
     * @return
     */
    @ConfigurationProperties(prefix = "spring.datasource.druid.read")
    @Bean(name = "readDruidDataSource")
    public DataSource readDruidDataSource() {
        return new DruidDataSource();
    }
    /**
     * DataSource 配置
     * @return
     */
    @ConfigurationProperties(prefix = "spring.datasource.druid.write")
    @Bean(name = "writeDruidDataSource")
    @Primary
    public DataSource writeDruidDataSource() {
        return new DruidDataSource();
    }
}

也許有的人看到這里會比較疑惑,prefix并沒有指定配置的全限定名,那它是怎么進(jìn)行配置綁定的呢?

相信大家肯定了解@Value注解,它可以通過全限定名進(jìn)行配置的綁定,這里的ConfigurationProperties其實(shí)就類似于使用多個(gè)@Value同時(shí)綁定,綁定的對象就是DataSource類型的對象,而且是 隱式綁定 的,意味著在配置文件編寫的時(shí)候需要與對應(yīng)類的字段名稱 相同,比如上述spring.datasource.druid.write.url=jdbc:mysql://localhost:3306/jpa ,當(dāng)然了,你也可以隨便寫個(gè)配置,比如 spring.datasource.druid.write.uuu=www.baidu.com,此時(shí)你只需要在注解中加上以下參數(shù)即可

以上就完成了多個(gè)數(shù)據(jù)源的配置,為讀寫分離做了鋪墊

作用于Class類及其用法

配置文件內(nèi)容

spring.datasource.url=jdbc:mysql://127.0.0.1:8888/test?useUnicode=false&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

java代碼

@ConfigurationProperties(prefix = "spring.datasource")
@Component
public class DatasourcePro {
    private String url;
    private String username;
    private String password;
    // 配置文件中是driver-class-name, 轉(zhuǎn)駝峰命名便可以綁定成
    private String driverClassName;
    private String type;
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getDriverClassName() {
        return driverClassName;
    }
    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}

用法

@Controller
@RequestMapping(value = "/config")
public class ConfigurationPropertiesController {
    @Autowired
    private DatasourcePro datasourcePro;
    @RequestMapping("/test")
    @ResponseBody
    public Map<String, Object> test(){
        Map<String, Object> map = new HashMap<>();
        map.put("url", datasourcePro.getUrl());
        map.put("userName", datasourcePro.getUsername());
        map.put("password", datasourcePro.getPassword());
        map.put("className", datasourcePro.getDriverClassName());
        map.put("type", datasourcePro.getType());
        return map;
    }
}

總結(jié)

@ConfigurationProperties 和 @value 有著相同的功能,但是 @ConfigurationProperties的寫法更為方便

@ConfigurationProperties 的 POJO類的命名比較嚴(yán)格,因?yàn)樗仨毢蚿refix的后綴名要一致, 不然值會綁定不上, 特殊的后綴名是“driver-class-name”這種帶橫杠的情況,在POJO里面的命名規(guī)則是 下劃線轉(zhuǎn)駝峰 就可以綁定成功,所以就是 “driverClassName”

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用

    Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用

    這篇文章主要介紹了Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java編程中隨機(jī)數(shù)的生成方式總結(jié)

    Java編程中隨機(jī)數(shù)的生成方式總結(jié)

    在Java中利用自帶的類庫可以有三種途徑可以產(chǎn)生隨機(jī)數(shù),這里我們舉了一些簡單的例子來進(jìn)行Java編程中隨機(jī)數(shù)的生成方式總結(jié),需要的朋友可以參考下
    2016-05-05
  • SpringBoot簡單使用SpringData的jdbc和durid

    SpringBoot簡單使用SpringData的jdbc和durid

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著SpringBoot簡單使用SpringData的jdbc和durid,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 基于javassist進(jìn)行動態(tài)編程過程解析

    基于javassist進(jìn)行動態(tài)編程過程解析

    這篇文章主要介紹了基于javassist進(jìn)行動態(tài)編程過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Jackson中json格式的字符串與對象的互相轉(zhuǎn)換方式

    Jackson中json格式的字符串與對象的互相轉(zhuǎn)換方式

    這篇文章主要介紹了Jackson中json格式的字符串與對象的互相轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 簡單了解Java垃圾回收器的種類

    簡單了解Java垃圾回收器的種類

    這篇文章主要介紹了簡單了解Java垃圾回收器的種類,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java如何獲取靜態(tài)資源文件路徑

    Java如何獲取靜態(tài)資源文件路徑

    這篇文章主要介紹了Java如何獲取靜態(tài)資源文件路徑問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 一文搞清楚Java中Comparable和Comparator的區(qū)別

    一文搞清楚Java中Comparable和Comparator的區(qū)別

    Java中的Comparable和Comparator都是用于集合排序的接口,但它們有明顯的區(qū)別,文中通過一些實(shí)例代碼詳細(xì)介紹了Java中Comparable和Comparator的區(qū)別,感興趣的同學(xué)跟著小編一起學(xué)習(xí)吧
    2023-05-05
  • Java截取url參數(shù)的方法

    Java截取url參數(shù)的方法

    本文給大家?guī)砹薺ava截取url參數(shù),url值得方法,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • springboot實(shí)現(xiàn)攔截器的3種方式及異步執(zhí)行的思考

    springboot實(shí)現(xiàn)攔截器的3種方式及異步執(zhí)行的思考

    實(shí)際項(xiàng)目中,我們經(jīng)常需要輸出請求參數(shù),響應(yīng)結(jié)果,方法耗時(shí),統(tǒng)一的權(quán)限校驗(yàn)等。本文首先為大家介紹 HTTP 請求中三種常見的攔截實(shí)現(xiàn),并且比較一下其中的差異。感興趣的可以了解一下
    2021-07-07

最新評論

门头沟区| 新竹县| 焉耆| 新安县| 龙里县| 霸州市| 漳州市| 合山市| 宁南县| 枝江市| 通化市| 泰兴市| 喀喇沁旗| 尖扎县| 华宁县| 广安市| 阜阳市| 汝城县| 夏邑县| 苏州市| 西畴县| 建始县| 乌兰县| 炎陵县| 锡林郭勒盟| 同江市| 瑞丽市| 阿巴嘎旗| 奎屯市| 都昌县| 巍山| 田东县| 定结县| 元江| 化德县| 临邑县| 扶风县| 太白县| 房山区| 嘉善县| 咸宁市|