SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實現(xiàn)方式
一、寫配置文件的位置
springboot官方規(guī)定了四個寫配置文件的位置,位置如下:
- file指項目文件夾
- classpath指打包后生成的的target文件夾

讀取的優(yōu)先級
優(yōu)先級高會覆蓋優(yōu)先級低的相同配置,不同配置會互補。
1.文件位置:
如果這四個位置都有配置文件,會按照下圖的優(yōu)先級讀取。

2.文件名和文件后綴:
Spring Boot默認會加載application.properties或application.yml文件,properties后綴的優(yōu)先級更高。
application.properties > application.ym
3.配置文件中的profile-specific文件:
可以根據(jù)激活的profile,如dev、prod等,在配置文件名后使用-{profile}來命名,這些profile-specific的配置文件將覆蓋通用的配置文件中的相同屬性。
例如:
- application-dev.properties
- application-prod.yml
4.命令行參數(shù)例如:application-dev.properties application-prod.yml
最后,在啟動jar包或war包時,可以指定參數(shù)值,命令行參數(shù)中指定的屬性會覆蓋之前加載的所有屬性。
# 設置環(huán)境變量
ENV SPRING_NACOS_SERVERADDRESS='nacos.xxx.xxx:8848'
ENV SPRING_NACOS_NAMESPACE='merit-test'
# 啟動jar包命令
java -Xms228m -Xmx228m -Dspring.cloud.nacos.config.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.config.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.config.username=merit -Dspring.cloud.nacos.config.password=merit -Dspring.cloud.nacos.discovery.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.discovery.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.discovery.username=merit -Dspring.cloud.nacos.discovery.password=merit -jar /home/admin/merit-backend/merit-appraise-*.jar
二、多環(huán)境配置
開發(fā)、測試、生產(chǎn)… ,多個環(huán)境下,如何指定不同環(huán)境的配置文件,使用spring.profiles.active屬性
1. properties

2. yaml

三、yaml配置文件
yaml支持多種數(shù)據(jù)結(jié)構,還支持表達式,但是對格式要求嚴格
- 大小寫敏感
- 使用縮進表示層級關系
- 縮進時不允許使用Tab鍵,只允許使用空格。
- 縮進的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可
1.字符串(String):表示文本數(shù)據(jù),可以使用單引號或雙引號括起來。
name: ginjiang # 如果字符串之中包含空格或特殊字符,需要放在引號之中 str: '內(nèi)容: 字符串' # 單引號之中如果還有單引號,必須連續(xù)使用兩個單引號轉(zhuǎn)義 str: 'labor''s day' # 多行字符串:允許在YAML中表示跨越多行的字符串,使用管道符(|)或大于符號(>)進行標識 description: | This is a multiline string in YAML.
2.數(shù)字(Number):表示數(shù)值數(shù)據(jù),可以是整數(shù)或浮點數(shù)。
age: 25 pi: 3.14159
3.布爾值(Boolean):表示邏輯值,可以是true或false。
isStudent: true hasCar: false
4.列表(List):表示有序的數(shù)據(jù)集合,使用短橫線(-)作為標記,可以包含不同類型的數(shù)據(jù)。
pets: - cat - dog - pig #行內(nèi)寫法 pets: [cat,dog,pig]
5.字典(Dictionary)/映射(Mapping)/對象(Object):表示鍵值對的集合,使用冒號(:)分隔鍵和值。
student:
name: qinjiang
age: 3
#行內(nèi)寫法
student: {name:qinjiang,age:3}6.字典和列表嵌套
employees:
- name: John
age: 25
- name: Alice
age: 307.空值(Null):表示空數(shù)據(jù),使用null或~表示。
address: null
8.時間(Time):表示時間數(shù)據(jù),使用ISO 8601格式表示。
timestamp: 2023-05-25T10:30:00Z
9.表達式
#自動生成uuid
name: ${random.uuid}
#自動生成隨機數(shù)
name: ${random.int}
#占位符:student.name有值就用student.name的值,沒有就用“小王”
name: ${student.name:小王}10.特殊值(Special Values):YAML支持一些特殊的值,如無窮大(Infinity)、負無窮大(Negative Infinity)、非數(shù)字(NaN)等。
special_values: - infinity: .inf - negative_infinity: -.inf - not_a_number: .nan
11.引用(References):YAML允許使用引用來引用其他節(jié)點的值,使用&符號定義引用,使用*符號引用引用的值。
person: &ref name: John age: 25 employee: details: *ref
yaml、properties、xml對比
| 特點 | YAML | Properties | XML |
|---|---|---|---|
| 語法結(jié)構 | 使用縮進和冒號(:)表示層級關系 | 使用等號(=)或冒號(:)表示鍵值對 | 使用標簽和元素表示層級關系 |
| 數(shù)據(jù)類型 | 支持多種數(shù)據(jù)類型,如字符串、數(shù)字、布爾值等 | 鍵值對 | 不直接支持數(shù)據(jù)類型,通過標簽定義 |
| 可讀性 | 高 | 高 | 低 |
| 擴展性 | 支持擴展自定義數(shù)據(jù)類型和對象結(jié)構 | 不支持 | 支持自定義標簽和元素結(jié)構 |
| 嵌套支持 | 支持 | 不支持 | 支持 |
| 適用場景 | 配置文件、數(shù)據(jù)序列化和交換格式 | 簡單配置文件和屬性管理 | 復雜數(shù)據(jù)交換和配置文件 |
四、讀取配置文件
1. @ConfigurationProperties(prefix=“key”)
配置文件的值自動注入到實體中。
通過在類上使用@ConfigurationProperties注解,并指定前綴,可以將配置文件中以該前綴開頭的屬性值綁定到對應的類的屬性上。

2. @Value(“${key}”)
給每個屬性單獨賦值。
@Configuration
public class Student{
@Value("${person.name}")
private String name;
}3. Environment對象
通過注入Environment對象,使用getProperty方法獲取配置文件中的屬性值。
@Component
public class MyComponent {
@Autowired
private Environment environment;
public void someMethod() {
String name = environment.getProperty("person.name");
}
}4. @PropertySource(value=“classpath:配置文件名”)
指定加載配置文件。
使用@Configuration注解和@PropertySource注解:在配置類上使用@Configuration注解,并使用@PropertySource注解指定配置文件的位置。接著使用@Value注解或Environment對象來獲取屬性值。
@Configuration
@PropertySource("classpath:my.properties")
public class Student{
@Value("${person.name}")
private String name;
}五、JSR303—參數(shù)驗證
@Validated 是 Spring Framework 中的一個注解,它用于在方法參數(shù)、方法返回值或類級別上啟用方法參數(shù)驗證(Method Parameter Validation)。
它基于 JSR-303(Bean Validation)規(guī)范,提供了一種方便的方式來對方法參數(shù)進行驗證。

常用的驗證注解
@NotNull:驗證參數(shù)值不為 null。@NotBlank:驗證字符串參數(shù)不為空(不為 null、不為空字符串、不包含空格)。@NotEmpty:驗證集合或數(shù)組參數(shù)不為空。@Min(value):驗證數(shù)字參數(shù)的最小值。@Max(value):驗證數(shù)字參數(shù)的最大值。@Size(min, max):驗證字符串、集合或數(shù)組參數(shù)的長度或大小是否在指定范圍內(nèi)。@Pattern(regex):驗證字符串參數(shù)是否匹配指定的正則表達式。@Email:驗證字符串參數(shù)是否為有效的電子郵件地址。@Valid:遞歸驗證嵌套對象或集合的元素。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java xml出現(xiàn)錯誤 javax.xml.transform.TransformerException: java.
這篇文章主要介紹了Java xml出現(xiàn)錯誤 javax.xml.transform.TransformerException: java.lang.NullPointerException的相關資料,需要的朋友可以參考下2016-11-11
Spring Boot整合RabbitMQ實例(Topic模式)
Topic Exchange 轉(zhuǎn)發(fā)消息主要是根據(jù)通配符。接下來通過本文給大家分享Spring Boot整合RabbitMQ實例(Topic模式),需要的朋友參考下吧2017-04-04
Java 實戰(zhàn)范例之線上婚紗攝影預定系統(tǒng)的實現(xiàn)
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+javaweb+SSM+springboot+mysql實現(xiàn)一個線上婚紗攝影預定系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11
解決新版idea新建文件沒有XML和Resource Bundle文件問題
這篇文章主要介紹了解決新版idea新建文件沒有XML和Resource Bundle文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07

