javascript
spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...
SpringBoot入門建站全系列(二十三)配置文件優先級及自定義配置文件
一、概述
Spring Boot允許多種配置來源,官網是這樣說的:
Spring Boot使用一種非常特殊的PropertySource順序,旨在允許合理地覆蓋值。按以下順序考慮屬性(優先級從高到低):
事實上,這個地方還少了一個,那就是配置中心,配置中心的優先級是最高的,還可以動態刷新,可以參考《SpringCloud技術指南系列(八)配置管理之Consul配置中心》配置中心的使用。
而且,我們常用的,一般有命令行參數、application-{profile}.properties和application.properties。自定義配置文件用的也不多,但是還是有人用的。
本篇著重講述下常用的配置方式。
首發地址: 品茗IT-同步發布
如果大家正在尋找一個java的學習環境,或者在開發中遇到困難,可以加入我們的java學習圈,點擊即可加入,共同學習,節約學習時間,減少很多在學習中遇到的難題。
二、命令行參數
默認情況下,SpringApplication將任何命令行選項參數(即,以--開頭的參數,如--server.port=9000)轉化為property,并將它們添加到spring Environment。如前所述,命令行屬性始終優先于其他屬性源。
如果您不希望將命令行屬性添加到Environment,則可以使用禁用它們SpringApplication.setAddCommandLineProperties(false)。
三、主配置文件
3.1 主配置常用配置
SpringApplication從application.properties以下位置的文件加載屬性并將它們添加到Spring Environment:(優先級從高往低)
如果你不喜歡properties文件,可以使用YAML替代properties文件,加載順序什么都是一樣的,只不過寫法不一樣。 下面是兩種寫法的不同:
properties文件:
server.port=8858 spring.profiles.active=locyaml文件
server:port: 8812 spring:profiles:active: locyaml文件看起來簡潔明了,properties文件看起來一坨一坨的,但是我更喜歡properties文件,因為yaml文件對語法要求嚴格,tab鍵和空格鍵入的內容都不一樣,很容易出錯。
3.2 主配置替換
這種配置方法很少使用,可以說基本上沒人用。
如果您不喜歡application.properties配置文件名,可以通過指定spring.config.name環境屬性切換到另一個文件名。您還可以使用spring.config.location屬性(以逗號分隔的目錄位置或文件路徑列表)來引用顯式位置。spring.config.additional-location來指定額外配置文件。
spring.config.name的作用就是給application.properties換個名。
spring.config.location就是指定了加載配置文件的路徑。就是不再從上面說的那個路徑取配置文件。
spring.config.additional-location就是指定了額外配置文件的加載路徑。除了在上面的在默認位置搜索配置文件,還搜索這個配置指定的位置的配置文件。而且優先級最高。
這三個配置都不能寫在應用里,因為它是在應用啟動前就確定的,需要在環境變量或者命令行參數確定。
四、其他配置文件
如果我們在application.properties中寫入了太多配置,想用其他配置文件來寫配置時,就需要考慮下如何加載這些配置文件。
4.1 指定配置文件加載
指定配置文件加載,就是指application-{profile}.properties和YAML變體 這種形式。
一直以來,我一直對這種形式存在誤解,以為它只能區分環境,后來才發現,自己錯了,這個只是純粹的指向新的配置文件,你指了哪個,哪個就能加載。下面說下它分別怎么用。
區分環境:
- 比如有三個環境的配置文件application-loc.properties,application-dev.properties,application-prod.properties,沒有固定位置,只要放在Spring能加載的位置即可,一般放在application.properties的低一級目錄,方便區分,比如application.properties放在classpath下,這些配置文件可以放在config/目錄下。
- 在命令行參數,或者application.properties中,使用spring.profiles.active=loc指定要來指定加載application-loc.properties配置文件。其他雷同。
區分應用:
- 比如我們有用到redis,我們想把redis的配置單獨出去,不想放在application.properties里面變一坨。就可以單獨新建配置文件application-redis.properties,放在Spring能加載的位置。
- application.properties中(這個就沒必要放命令行參數了,因為我們應用里面肯定要用到的),使用spring.profiles.active=loc,redis指定要來指定加載application-redis.properties配置文件。
- 如果使用命令行參數傳遞的spring.profiles.active=loc,可能會覆蓋掉配置文件中的redis配置,這時候,我們可以使用spring.profiles.include配置,疊加激活profile,如果配置spring.profiles.include=redis,指定spring.profiles.active=loc,就可以同時激活loc,redis,等同于spring.profiles.active=loc,redis。
4.2 自定義配置文件加載
自定義配置文件,就是定義的配置文件命名規范不再遵循Spring boot的要求,自由加載。需要使用@PropertySource注解加載配置文件。
user.properties:
user.username=cff user.realName=大爺 user.mobile=23333 hello.message=sssssssssssssssssssaasa代碼示例:
package cn.pomit.springbootwork.consulclient.service;import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource;@Configuration @ConfigurationProperties(prefix="user") @PropertySource("classpath:user.properties") public class UserConfig {private String userName;private String realName;private Integer mobile;private String message;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getRealName() {return realName;}public void setRealName(String realName) {this.realName = realName;}public Integer getMobile() {return mobile;}public void setMobile(Integer mobile) {this.mobile = mobile;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return "UserConfig [userName=" + userName + ", realName=" + realName + ", mobile=" + mobile + ", message="+ message + "]";}}這樣就可以直接使用user.properties配置文件中的配置,這里有注意事項:
- 只有@PropertySource,是不能加載配置的。
- @ConfigurationProperties(prefix="user") 只綁定了user.開頭的屬性。
- @Value 可以注入任何屬性。
- @ConfigurationProperties和@Value的不同是,@ConfigurationProperties支持屬性綁定,@Value不行,但是@Value支持el表達式,@ConfigurationProperties不支持。
五、Jar包外的配置文件
品茗IT-博客專題:https://www.pomit.cn/lecture.html匯總了Spring專題、Springboot專題、SpringCloud專題、web基礎配置專題。
快速構建項目
Spring組件化構建
SpringBoot組件化構建
SpringCloud服務化構建
喜歡這篇文章么,喜歡就加入我們一起討論SpringBoot使用吧!
總結
以上是生活随笔為你收集整理的spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python空行拼接字符串_python
- 下一篇: spss方差分析_SPSS单因素重复测量