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

SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實(shí)現(xiàn)方式

 更新時(shí)間:2024年09月23日 15:48:29   作者:夏詩(shī)曼CharmaineXia  
SpringBoot支持多種配置文件位置和格式,其中application.properties和application.yml是默認(rèn)加載的文件,配置文件可以根據(jù)環(huán)境通過(guò)spring.profiles.active屬性進(jìn)行區(qū)分,命令行參數(shù)具有最高優(yōu)先級(jí),可覆蓋其他所有配置

一、寫(xiě)配置文件的位置

springboot官方規(guī)定了四個(gè)寫(xiě)配置文件的位置,位置如下:

  • file指項(xiàng)目文件夾
  • classpath指打包后生成的的target文件夾

讀取的優(yōu)先級(jí)

優(yōu)先級(jí)高會(huì)覆蓋優(yōu)先級(jí)低的相同配置,不同配置會(huì)互補(bǔ)。

1.文件位置:

如果這四個(gè)位置都有配置文件,會(huì)按照下圖的優(yōu)先級(jí)讀取。

2.文件名和文件后綴:

Spring Boot默認(rèn)會(huì)加載application.properties或application.yml文件,properties后綴的優(yōu)先級(jí)更高。

application.properties > application.ym

3.配置文件中的profile-specific文件:

可以根據(jù)激活的profile,如dev、prod等,在配置文件名后使用-{profile}來(lái)命名,這些profile-specific的配置文件將覆蓋通用的配置文件中的相同屬性。

例如:

  • application-dev.properties  
  • application-prod.yml

4.命令行參數(shù)例如:application-dev.properties   application-prod.yml

最后,在啟動(dòng)jar包或war包時(shí),可以指定參數(shù)值,命令行參數(shù)中指定的屬性會(huì)覆蓋之前加載的所有屬性。

# 設(shè)置環(huán)境變量
ENV SPRING_NACOS_SERVERADDRESS='nacos.xxx.xxx:8848'
ENV SPRING_NACOS_NAMESPACE='merit-test'

# 啟動(dòng)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)境配置

開(kāi)發(fā)、測(cè)試、生產(chǎn)… ,多個(gè)環(huán)境下,如何指定不同環(huán)境的配置文件,使用spring.profiles.active屬性

1. properties

2. yaml

三、yaml配置文件

yaml支持多種數(shù)據(jù)結(jié)構(gòu),還支持表達(dá)式,但是對(duì)格式要求嚴(yán)格

  • 大小寫(xiě)敏感
  • 使用縮進(jìn)表示層級(jí)關(guān)系
  • 縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格。
  • 縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可

1.字符串(String):表示文本數(shù)據(jù),可以使用單引號(hào)或雙引號(hào)括起來(lái)。

name: ginjiang

# 如果字符串之中包含空格或特殊字符,需要放在引號(hào)之中
str: '內(nèi)容: 字符串'

# 單引號(hào)之中如果還有單引號(hào),必須連續(xù)使用兩個(gè)單引號(hào)轉(zhuǎn)義
str: 'labor''s day' 

# 多行字符串:允許在YAML中表示跨越多行的字符串,使用管道符(|)或大于符號(hào)(>)進(jìn)行標(biāo)識(shí)
description: |
  This is a multiline
  string in YAML.

2.數(shù)字(Number):表示數(shù)值數(shù)據(jù),可以是整數(shù)或浮點(diǎn)數(shù)。

age: 25
pi: 3.14159

3.布爾值(Boolean):表示邏輯值,可以是true或false。

isStudent: true
hasCar: false

4.列表(List):表示有序的數(shù)據(jù)集合,使用短橫線(xiàn)(-)作為標(biāo)記,可以包含不同類(lèi)型的數(shù)據(jù)。

pets:
  - cat
  - dog
  - pig
  
#行內(nèi)寫(xiě)法  
pets: [cat,dog,pig]

5.字典(Dictionary)/映射(Mapping)/對(duì)象(Object):表示鍵值對(duì)的集合,使用冒號(hào)(:)分隔鍵和值。

student:
    name: qinjiang
    age: 3
 
#行內(nèi)寫(xiě)法
student: {name:qinjiang,age:3}

6.字典和列表嵌套

employees:
  - name: John
    age: 25
  - name: Alice
    age: 30

7.空值(Null):表示空數(shù)據(jù),使用null或~表示。

address: null

8.時(shí)間(Time):表示時(shí)間數(shù)據(jù),使用ISO 8601格式表示。

timestamp: 2023-05-25T10:30:00Z

9.表達(dá)式

#自動(dòng)生成uuid
name: ${random.uuid}

#自動(dòng)生成隨機(jī)數(shù)
name: ${random.int}

#占位符:student.name有值就用student.name的值,沒(méi)有就用“小王”
name: ${student.name:小王}

10.特殊值(Special Values):YAML支持一些特殊的值,如無(wú)窮大(Infinity)、負(fù)無(wú)窮大(Negative Infinity)、非數(shù)字(NaN)等。

special_values:
  - infinity: .inf
  - negative_infinity: -.inf
  - not_a_number: .nan

11.引用(References):YAML允許使用引用來(lái)引用其他節(jié)點(diǎn)的值,使用&符號(hào)定義引用,使用*符號(hào)引用引用的值。

person: &ref
  name: John
  age: 25

employee:
  details: *ref

yaml、properties、xml對(duì)比

特點(diǎn)YAMLPropertiesXML
語(yǔ)法結(jié)構(gòu)使用縮進(jìn)和冒號(hào)(:)表示層級(jí)關(guān)系使用等號(hào)(=)或冒號(hào)(:)表示鍵值對(duì)使用標(biāo)簽和元素表示層級(jí)關(guān)系
數(shù)據(jù)類(lèi)型支持多種數(shù)據(jù)類(lèi)型,如字符串、數(shù)字、布爾值等鍵值對(duì)不直接支持?jǐn)?shù)據(jù)類(lèi)型,通過(guò)標(biāo)簽定義
可讀性
擴(kuò)展性支持?jǐn)U展自定義數(shù)據(jù)類(lèi)型和對(duì)象結(jié)構(gòu)不支持支持自定義標(biāo)簽和元素結(jié)構(gòu)
嵌套支持支持不支持支持
適用場(chǎng)景配置文件、數(shù)據(jù)序列化和交換格式簡(jiǎn)單配置文件和屬性管理復(fù)雜數(shù)據(jù)交換和配置文件

四、讀取配置文件

1. @ConfigurationProperties(prefix=“key”)

  

配置文件的值自動(dòng)注入到實(shí)體中。  

通過(guò)在類(lèi)上使用@ConfigurationProperties注解,并指定前綴,可以將配置文件中以該前綴開(kāi)頭的屬性值綁定到對(duì)應(yīng)的類(lèi)的屬性上。

2. @Value(“${key}”)

給每個(gè)屬性單獨(dú)賦值。

@Configuration
public class Student{
    @Value("${person.name}")
    private String name;
}

3. Environment對(duì)象

通過(guò)注入Environment對(duì)象,使用getProperty方法獲取配置文件中的屬性值。

@Component
public class MyComponent {
    @Autowired
    private Environment environment;

    public void someMethod() {
        String name = environment.getProperty("person.name");
    }
}

4. @PropertySource(value=“classpath:配置文件名”)

  

指定加載配置文件。  

使用@Configuration注解和@PropertySource注解:在配置類(lèi)上使用@Configuration注解,并使用@PropertySource注解指定配置文件的位置。接著使用@Value注解或Environment對(duì)象來(lái)獲取屬性值。

@Configuration
@PropertySource("classpath:my.properties")
public class Student{
    @Value("${person.name}")
    private String name;
}

五、JSR303—參數(shù)驗(yàn)證

@Validated 是 Spring Framework 中的一個(gè)注解,它用于在方法參數(shù)、方法返回值或類(lèi)級(jí)別上啟用方法參數(shù)驗(yàn)證(Method Parameter Validation)。

它基于 JSR-303(Bean Validation)規(guī)范,提供了一種方便的方式來(lái)對(duì)方法參數(shù)進(jìn)行驗(yàn)證。

常用的驗(yàn)證注解

  • @NotNull:驗(yàn)證參數(shù)值不為 null。
  • @NotBlank:驗(yàn)證字符串參數(shù)不為空(不為 null、不為空字符串、不包含空格)。
  • @NotEmpty:驗(yàn)證集合或數(shù)組參數(shù)不為空。
  • @Min(value):驗(yàn)證數(shù)字參數(shù)的最小值。
  • @Max(value):驗(yàn)證數(shù)字參數(shù)的最大值。
  • @Size(min, max):驗(yàn)證字符串、集合或數(shù)組參數(shù)的長(zhǎng)度或大小是否在指定范圍內(nèi)。
  • @Pattern(regex):驗(yàn)證字符串參數(shù)是否匹配指定的正則表達(dá)式。
  • @Email:驗(yàn)證字符串參數(shù)是否為有效的電子郵件地址。
  • @Valid:遞歸驗(yàn)證嵌套對(duì)象或集合的元素。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java xml出現(xiàn)錯(cuò)誤 javax.xml.transform.TransformerException: java.lang.NullPointerException

    Java xml出現(xiàn)錯(cuò)誤 javax.xml.transform.TransformerException: java.

    這篇文章主要介紹了Java xml出現(xiàn)錯(cuò)誤 javax.xml.transform.TransformerException: java.lang.NullPointerException的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Spring Boot整合RabbitMQ實(shí)例(Topic模式)

    Spring Boot整合RabbitMQ實(shí)例(Topic模式)

    Topic Exchange 轉(zhuǎn)發(fā)消息主要是根據(jù)通配符。接下來(lái)通過(guò)本文給大家分享Spring Boot整合RabbitMQ實(shí)例(Topic模式),需要的朋友參考下吧
    2017-04-04
  • Java 實(shí)戰(zhàn)范例之線(xiàn)上婚紗攝影預(yù)定系統(tǒng)的實(shí)現(xiàn)

    Java 實(shí)戰(zhàn)范例之線(xiàn)上婚紗攝影預(yù)定系統(tǒng)的實(shí)現(xiàn)

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+javaweb+SSM+springboot+mysql實(shí)現(xiàn)一個(gè)線(xiàn)上婚紗攝影預(yù)定系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • 詳解Java實(shí)現(xiàn)緩存(LRU,FIFO)

    詳解Java實(shí)現(xiàn)緩存(LRU,FIFO)

    本篇文章主要介紹了詳解Java實(shí)現(xiàn)緩存(LRU,FIFO) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • 解決新版idea新建文件沒(méi)有XML和Resource Bundle文件問(wèn)題

    解決新版idea新建文件沒(méi)有XML和Resource Bundle文件問(wèn)題

    這篇文章主要介紹了解決新版idea新建文件沒(méi)有XML和Resource Bundle文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java jvm兩種存儲(chǔ)區(qū)的類(lèi)型知識(shí)點(diǎn)講解

    java jvm兩種存儲(chǔ)區(qū)的類(lèi)型知識(shí)點(diǎn)講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java jvm兩種存儲(chǔ)區(qū)的類(lèi)型知識(shí)點(diǎn)講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • Java如何正確的使用wait-notify方法你知道嗎

    Java如何正確的使用wait-notify方法你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java如何正確的使用wait-notify方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Java經(jīng)典面試題匯總:異常

    Java經(jīng)典面試題匯總:異常

    本篇總結(jié)的是Java異常相關(guān)的面試題,后續(xù)會(huì)持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實(shí)習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯(cuò)誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • obix協(xié)議在java中的配置和使用詳解

    obix協(xié)議在java中的配置和使用詳解

    這篇文章主要給大家介紹了關(guān)于obix協(xié)議在java中的配置和使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 多模塊項(xiàng)目使用枚舉配置spring-cache緩存方案詳解

    多模塊項(xiàng)目使用枚舉配置spring-cache緩存方案詳解

    這篇文章主要為大家介紹了多模塊項(xiàng)目使用枚舉配置spring-cache緩存的方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評(píng)論