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ù)中指定的屬性會覆蓋之前加載的所有屬性。
# 設(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é)構(gòu),還支持表達式,但是對格式要求嚴(yán)格
- 大小寫敏感
- 使用縮進表示層級關(guān)系
- 縮進時不允許使用Tab鍵,只允許使用空格。
- 縮進的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可
1.字符串(String):表示文本數(shù)據(jù),可以使用單引號或雙引號括起來。
name: ginjiang # 如果字符串之中包含空格或特殊字符,需要放在引號之中 str: '內(nèi)容: 字符串' # 單引號之中如果還有單引號,必須連續(xù)使用兩個單引號轉(zhuǎn)義 str: 'labor''s day' # 多行字符串:允許在YAML中表示跨越多行的字符串,使用管道符(|)或大于符號(>)進行標(biāo)識 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ù)集合,使用短橫線(-)作為標(biāo)記,可以包含不同類型的數(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: 30
7.空值(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é)構(gòu) | 使用縮進和冒號(:)表示層級關(guān)系 | 使用等號(=)或冒號(:)表示鍵值對 | 使用標(biāo)簽和元素表示層級關(guān)系 |
數(shù)據(jù)類型 | 支持多種數(shù)據(jù)類型,如字符串、數(shù)字、布爾值等 | 鍵值對 | 不直接支持?jǐn)?shù)據(jù)類型,通過標(biāo)簽定義 |
可讀性 | 高 | 高 | 低 |
擴展性 | 支持?jǐn)U展自定義數(shù)據(jù)類型和對象結(jié)構(gòu) | 不支持 | 支持自定義標(biāo)簽和元素結(jié)構(gòu) |
嵌套支持 | 支持 | 不支持 | 支持 |
適用場景 | 配置文件、數(shù)據(jù)序列化和交換格式 | 簡單配置文件和屬性管理 | 復(fù)雜數(shù)據(jù)交換和配置文件 |
四、讀取配置文件
1. @ConfigurationProperties(prefix=“key”)
配置文件的值自動注入到實體中。
通過在類上使用@ConfigurationProperties注解,并指定前綴,可以將配置文件中以該前綴開頭的屬性值綁定到對應(yīng)的類的屬性上。
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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java xml出現(xiàn)錯誤 javax.xml.transform.TransformerException: java.
這篇文章主要介紹了Java xml出現(xiàn)錯誤 javax.xml.transform.TransformerException: java.lang.NullPointerException的相關(guān)資料,需要的朋友可以參考下2016-11-11Spring Boot整合RabbitMQ實例(Topic模式)
Topic Exchange 轉(zhuǎn)發(fā)消息主要是根據(jù)通配符。接下來通過本文給大家分享Spring Boot整合RabbitMQ實例(Topic模式),需要的朋友參考下吧2017-04-04Java 實戰(zhàn)范例之線上婚紗攝影預(yù)定系統(tǒng)的實現(xiàn)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+javaweb+SSM+springboot+mysql實現(xiàn)一個線上婚紗攝影預(yù)定系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11解決新版idea新建文件沒有XML和Resource Bundle文件問題
這篇文章主要介紹了解決新版idea新建文件沒有XML和Resource Bundle文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07