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

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

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

我們?cè)陧?xiàng)目開發(fā)中經(jīng)常會(huì)用到配置信息,例如數(shù)據(jù)庫連接的帳號(hào)、密碼等,而為了方便維護(hù),我們通常將這些信息放到配置文件中。在需要用到這些配置信息時(shí),可以通過代碼獲取。下面我們看看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 對(duì)應(yīng)的 value 值,并將value值賦給對(duì)應(yīng)的變量,之后就像使用正常變量一樣就可以獲取到配置信息。

@ConfigurationProperties讀取一組配置信息

@ConfigurationProperties注解用于讀取指定前綴的一組配置信息并與bean綁定,具體的配置屬性會(huì)綁定到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適用與少量配置信息的場(chǎng)景,在一些較復(fù)雜的場(chǎng)景下(業(yè)務(wù)繁瑣、配置項(xiàng)多),需要考慮把相關(guān)一組配置信息封裝成一個(gè)或多個(gè)配置信息類,這時(shí)就可以使用@ConfigurationProperties。

@PropertySource讀取指定配置文件

當(dāng)我們項(xiàng)目比較大配置信息比較多的時(shí),如果所有的配置信息都放在一個(gè)配置文件中,就會(huì)顯得比較臃腫且不易理解和維護(hù)。此時(shí),我們可以按照需求將該配置文件拆分為多個(gè),并使用@PropertySource注解配合@Value或@ConfigurationProperties讀取指定配置文件中的配置信息。假設(shè)我們存儲(chǔ)數(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);
}

指定項(xiàng)目的配置文件

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

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

spring:
 profiles:
  active:
  - p

讀取復(fù)雜配置信息

看下如下配置文件

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

關(guān)鍵點(diǎn)在private Map<String, MsgInfo> tranprocol;,http和fix會(huì)自動(dòng)映射為tranprocol的key,orderid和count會(huì)映射到MsgInfo的成員屬性上。

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

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

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

相關(guān)文章

  • Spring和SpringMVC父子容器關(guān)系初窺(小結(jié))

    Spring和SpringMVC父子容器關(guān)系初窺(小結(jié))

    這篇文章主要介紹了Spring和SpringMVC父子容器關(guān)系初窺(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • easyexcel讀取excel合并單元格數(shù)據(jù)的操作代碼

    easyexcel讀取excel合并單元格數(shù)據(jù)的操作代碼

    這篇文章主要介紹了easyexcel讀取excel合并單元格數(shù)據(jù)的操作代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • @TableField注解之深入理解與應(yīng)用方式

    @TableField注解之深入理解與應(yīng)用方式

    在現(xiàn)代軟件開發(fā)中,@TableField注解作為MyBatis-Plus中的一個(gè)重要特性,用于定義實(shí)體類字段與數(shù)據(jù)庫表字段的映射關(guān)系,本文詳細(xì)介紹了@TableField注解的使用場(chǎng)景、屬性及其在實(shí)際開發(fā)中的應(yīng)用,包括字段名稱映射、非數(shù)據(jù)庫字段標(biāo)識(shí)、字段填充策略
    2024-10-10
  • Java實(shí)現(xiàn)的RSA加密解密算法示例

    Java實(shí)現(xiàn)的RSA加密解密算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的RSA加密解密算法,結(jié)合實(shí)例形式分析了java RAS加密解密算法的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • Springboot整合Druid實(shí)現(xiàn)對(duì)訪問的監(jiān)控方式

    Springboot整合Druid實(shí)現(xiàn)對(duì)訪問的監(jiān)控方式

    這篇文章主要介紹了Springboot整合Druid實(shí)現(xiàn)對(duì)訪問的監(jiān)控方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Springboot熱加載JAR包的實(shí)現(xiàn)方法

    Springboot熱加載JAR包的實(shí)現(xiàn)方法

    SpringBoot作為一個(gè)開發(fā)快速、部署方便的微服務(wù)框架,具有自動(dòng)配置、約定優(yōu)于配置的特點(diǎn),能夠極大地提高開發(fā)效率,它提供了豐富的擴(kuò)展點(diǎn),非常適合實(shí)現(xiàn)動(dòng)態(tài)加載Jar包的功能,本文將深入探討如何在SpringBoot應(yīng)用中實(shí)現(xiàn)動(dòng)態(tài)加載Jar包的方案,感興趣的朋友一起看看吧
    2024-04-04
  • springboot設(shè)置了server.port但是沒有用,還是8080問題

    springboot設(shè)置了server.port但是沒有用,還是8080問題

    這篇文章主要介紹了springboot設(shè)置了server.port但是沒有用,還是8080問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring定時(shí)服務(wù)QuartZ原理及代碼案例

    Spring定時(shí)服務(wù)QuartZ原理及代碼案例

    這篇文章主要介紹了Spring定時(shí)服務(wù)QuartZ原理及代碼案例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java中UDP簡(jiǎn)單聊天程序?qū)嵗a

    java中UDP簡(jiǎn)單聊天程序?qū)嵗a

    這篇文章主要介紹了java中UDP簡(jiǎn)單聊天程序?qū)嵗a,有需要的朋友可以參考一下
    2013-12-12
  • ActiveMQ中consumer的消息確認(rèn)機(jī)制詳解

    ActiveMQ中consumer的消息確認(rèn)機(jī)制詳解

    這篇文章主要介紹了ActiveMQ中consumer的消息確認(rèn)機(jī)制詳解,對(duì)于broker而言,只有接收到確認(rèn)指令,才會(huì)認(rèn)為消息被正確的接收或者處理成功了,InforSuiteMQ提供以下幾種Consumer與Broker之間的消息確認(rèn)方式,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

信丰县| 思南县| 五大连池市| 林州市| 连云港市| 田阳县| 广饶县| 新绛县| 舟曲县| 郴州市| 上虞市| 香格里拉县| 永新县| 宝山区| 卫辉市| 灌云县| 云梦县| 东乌| 黄梅县| 香格里拉县| 永泰县| 隆子县| 伊宁市| 同江市| 宝清县| 凤台县| 扬中市| 定远县| 盘锦市| 响水县| 沅陵县| 清远市| 赣州市| 斗六市| 宽甸| 温州市| 额敏县| 大渡口区| 泸溪县| 富宁县| 招远市|