欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解SpringBoot讀取配置文件的N種方法

 更新時間:2021年02月10日 09:39:51   作者:程序員Mark_Chou  
這篇文章主要介紹了詳解SpringBoot讀取配置文件的N種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

我們在項目開發(fā)中經(jīng)常會用到配置信息,例如數(shù)據(jù)庫連接的帳號、密碼等,而為了方便維護,我們通常將這些信息放到配置文件中。在需要用到這些配置信息時,可以通過代碼獲取。下面我們看看Spring中有哪些獲取配置信息的方法。

PropertiesLoaderUtils讀取

通過ClassPathResource加載配置文件資源,結(jié)合PropertiesLoaderUtils類讀取,源碼如下:

ClassPathResource resource = new ClassPathResource("application.properties");  
try {    
 Properties properties = PropertiesLoaderUtils.loadProperties(resource);       String account = properties.getProperty("jdbc.account");        
} catch (IOException e) {    
 …… 
}

@Value注解讀取指定屬性

配置信息

jdbc:
 account: zhangsan
 pwd: 123456

讀取方法

@Component
public class JdbcService {
  @Value("${jdbc.account}")
  private String account;
  @Value("${jdbc.pwd}")
  private String pwd;

  public void connectDb() {
    System.out.println("Database has connected, jdbc account is "
      + account + ", password is " + pwd);
  }
}

@Value 注解通過 ${key}獲取配置文件中和 key 對應的 value 值,并將value值賦給對應的變量,之后就像使用正常變量一樣就可以獲取到配置信息。

@ConfigurationProperties讀取一組配置信息

@ConfigurationProperties注解用于讀取指定前綴的一組配置信息并與bean綁定,具體的配置屬性會綁定到bean的成員屬性中,即前綴名+成員屬性名等于配置文件中的key。之后可以像使用其他bean一樣使用該bean并讀取配置信息。

配置信息

user:
 name: zhangsan
 sex: 男
 homeUrl: www.xxx.com

綁定bean

@Component
@Data
@ConfigurationProperties(prefix = "user")
public class User {
  private String name;
  private String sex;
  private String homeUrl;
}

使用bean

@Service
public class UserService {
  @Autowired
  User user;

  public void getUserInfo() {
    System.out.println(user.toString());
  }
}

@Value適用與少量配置信息的場景,在一些較復雜的場景下(業(yè)務繁瑣、配置項多),需要考慮把相關一組配置信息封裝成一個或多個配置信息類,這時就可以使用@ConfigurationProperties。

@PropertySource讀取指定配置文件

當我們項目比較大配置信息比較多的時,如果所有的配置信息都放在一個配置文件中,就會顯得比較臃腫且不易理解和維護。此時,我們可以按照需求將該配置文件拆分為多個,并使用@PropertySource注解配合@Value或@ConfigurationProperties讀取指定配置文件中的配置信息。假設我們存儲數(shù)據(jù)連接信息的配置文件為jdbc.properties,內(nèi)容如下:

jdbc:
 account: zhangsan
 pwd: 123456
@Component
@Data
@PropertySource(value = {"classpath:jdbc.properties"})
@ConfigurationProperties(prefix = "jdbc")
public class JdbcCfg {
  private String account;
  private String pwd;

  public void connectDb() {
    System.out.println("Database has connected, jdbc account is "
      + account + ", password is " + pwd);
  }
}

也可以和@Value配合使用。

@Component
@PropertySource(value = {"classpath:jdbc.properties"})
public class JdbcCfg {
 @Value("${jdbc.account}")
  private String account;
  @Value("${jdbc.pwd}")
  private String pwd;
  
  public void connectDb() {
   System.out.println("Database has connected, jdbc account is "
     + account + ", password is " + pwd);
}

指定項目的配置文件

在實際開發(fā)中,我們一般最少會有兩個環(huán)境——開發(fā)環(huán)境和線上環(huán)境,可能還會存在測試環(huán)境,這些環(huán)境往往會使用不同的配置信息,比如端口、數(shù)據(jù)庫鏈接地址等。如果我們把項目部署到線上環(huán)境后,在把配置信息一項一項的改成線上環(huán)境對應的會比較麻煩。比較科學的解決方法是,線上環(huán)境對應一套配置信息,開發(fā)環(huán)境對應一套,當我們在開發(fā)環(huán)境時指定讀取開發(fā)的配置,在線上時指定讀取線上的配置。

假設開發(fā)環(huán)境對應的配置文件為application-d.yml,線上環(huán)境對應的配置文件為application-d.yml。然后在application.yml文件中配置要使用的哪個配置文件即可,如在線上環(huán)境可按如下指定。

spring:
 profiles:
  active:
  - p

讀取復雜配置信息

看下如下配置文件

#http協(xié)議下消息傳輸
msgtransfer.tranprocol.http.orderid = order1
msgtransfer.tranprocol.http.count = 100

#fix協(xié)議下消息傳輸
msgtransfer.tranprocol.fix.orderid = order2
msgtransfer.tranprocol.fix.count = 200

上面的配置文件是為了支持不同協(xié)議的消息傳輸,該配置的key中也存在變量,這樣的配置信息如何讀取呢?

@Component
@Data
@ConfigurationProperties(prefix = "msgtransfer")
public class MsgTransferCfg {
  private Map<String, MsgInfo> tranprocol;
  
  public static class MsgInfo {
    private String orderid;
    private int count;
  }  
}

關鍵點在private Map<String, MsgInfo> tranprocol;,http和fix會自動映射為tranprocol的key,orderid和count會映射到MsgInfo的成員屬性上。

如果在配置文件的key中使用變量的,需要在相應的bean中定義map,配置文件和map的對應規(guī)則如下:

前綴.map名稱.key.pro = value

到此這篇關于詳解SpringBoot讀取配置文件的N種方法的文章就介紹到這了,更多相關SpringBoot讀取配置文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Spring中的FactoryBean

    詳解Spring中的FactoryBean

    本篇文章主要介紹了Spring中的FactoryBean,如果一個bean的創(chuàng)建過程中涉及到很多其他的bean 和復雜的邏輯,用xml配置比較困難,這時可以考慮用FactoryBean
    2017-04-04
  • IDEA中實體類(POJO)與JSON快速互轉(zhuǎn)問題

    IDEA中實體類(POJO)與JSON快速互轉(zhuǎn)問題

    這篇文章主要介紹了IDEA中實體類(POJO)與JSON快速互轉(zhuǎn),本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • SpringBoot快速過濾出一次請求的所有日志的示例代碼

    SpringBoot快速過濾出一次請求的所有日志的示例代碼

    在現(xiàn)網(wǎng)出現(xiàn)故障時,我們經(jīng)常需要獲取一次請求流程里的所有日志進行定位,本文給大家介紹了SpringBoot如何快速過濾出一次請求的所有日志,文中有相關的代碼和示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • Java實現(xiàn)Map遍歷key-value的四種方法

    Java實現(xiàn)Map遍歷key-value的四種方法

    本文主要介紹了Java實現(xiàn)Map遍歷key-value的四種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Springboot跨域處理的多種方式小結(jié)

    Springboot跨域處理的多種方式小結(jié)

    當一臺服務器資源從另一臺服務器(不同 的域名或者端口)請求一個資源或者接口,就會發(fā)起一個跨域 HTTP 請求,這篇文章主要介紹了Springboot跨域處理的多種方式小結(jié),需要的朋友可以參考下
    2023-11-11
  • Springboot攔截filter中異常的處理

    Springboot攔截filter中異常的處理

    SpringBoot提供了全局異常處理機制可以攔截所有異常,包括Filter中的異常,本文主要介紹了Springboot攔截filter中異常的處理,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Springboot集成Springbrick實現(xiàn)動態(tài)插件的步驟詳解

    Springboot集成Springbrick實現(xiàn)動態(tài)插件的步驟詳解

    這篇文章主要介紹了Springboot集成Springbrick實現(xiàn)動態(tài)插件的詳細過程,文中的流程通過代碼示例介紹的非常詳細,感興趣的同學可以參考一下
    2023-06-06
  • Java編程線程間通信與信號量代碼示例

    Java編程線程間通信與信號量代碼示例

    這篇文章主要介紹了Java編程線程間通信與信號量代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 舉例講解Java的JSON類庫GSON的基本用法

    舉例講解Java的JSON類庫GSON的基本用法

    GSON是谷歌在GitHub上開源的Java的JSON格式轉(zhuǎn)換類庫,能夠?qū)崿F(xiàn)Java對象向JSON的序列和反序列,這里我們就來舉例講解Java的JSON類庫GSON的基本用法:
    2016-06-06
  • java微信掃碼支付模式一線下支付功能實現(xiàn)

    java微信掃碼支付模式一線下支付功能實現(xiàn)

    本篇文章主要介紹了JAVA微信掃碼支付模式一線下支付功能實現(xiàn),具有一定的參考價值,有需要的可以了解一下。
    2016-11-11

最新評論