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

SpringBoot?配置文件總結(jié)

 更新時間:2023年05月16日 09:04:15   作者:god23bin  
SpringBoot中提供一個全局的配置文件:application.properties,這個配置文件的作用就是,允許我們通過這個配置文件去修改Spring?Boot自動配置的默認值,本文詳細總結(jié)了SpringBoot配置文件,文中有詳細的代碼示例,感興趣的同學(xué)可以參考下

前言

Spring Boot 中提供一個全局的配置文件:application.properties,這個配置文件的作用就是,允許我們通過這個配置文件去修改 Spring Boot 自動配置的默認值。

Spring Boot 支持兩種格式的配置文件:application.propertiesapplication.yml。

yml 等同于 yaml,寫法看個人喜歡,我喜歡寫成 application.yml

不同后綴不同寫法

application.propertiesapplication.yml ,它們的區(qū)別在于語法不同,但本質(zhì)上是一樣的。application.properties 使用鍵值對的方式來配置,而 application.yml 使用縮進和冒號的方式來配置。

properties

properties 作為后綴的配置文件,語法是這樣的:key = value,如果有多級配置項,則是 first.second.third = value

key=value
first.second.third=value

示例:

  • 定義屬性:
key=value
game.name=GTA5

這里的 key 和 game.name 都是屬性名稱,而 value 和 GTA5 是屬性的

  • 定義 List:
game.list=GTA5,NBA2K,AC

這里的 game.list 這個列表包含了 3 個元素。

  • 定義 Map:
game.map.key1=value1
game.map.key2=value2

這里的 game.map 是一個 Map,這個 Map 包含了兩個元素,key1 映射到 value1,key2 映射到 value2

  • 引用已定義的屬性:
game.name=GTA5
# 引用上面已定義的屬性
great.game=${game.name}

yml (yaml)

yml 作為后綴的配置文件,語法是這樣的:key: value。使用冒號代替等號,同時冒號后面需要跟上一個空格符,不可省略。

key: value
first:
  second:
    third: value

示例:

  • 定義屬性:
key: value
game:
  name: GTA5
  • 定義 List:
game:
  list:
    - GTA5
    - NBA2K
    - AC
  • 定義 Map:
game:
  map:
    key1: value1
    key2: value2
  • 引用已定義的屬性:
game:
  name: GTA5
great:
  game: @{game.name}

不同環(huán)境下切換不同的配置文件

一般項目中在不同環(huán)境下都有不同的配置,還是以這個 Tomcat 的端口號為例:

目前有 3 個環(huán)境,分別是開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境。在開發(fā)環(huán)境下,端口號是 4790;測試環(huán)境下,端口號是 4791;生產(chǎn)環(huán)境下是 4792。

application-dev.yml

server:
  port: 4790

application-test.yml

server:
  port: 4791

application-prod.yml

server:
  port: 4792

spring.profiles.active

現(xiàn)在,通過 spring.profiles.active 這個配置項,在 application.yml 中指定我們想要切換的配置文件,現(xiàn)在指定使用開發(fā)環(huán)境的配置文件

# 指定使用 application-dev.yml 這個配置文件
spring:
  profiles:
    active: dev

啟動 Spring Boot 應(yīng)用,控制臺輸出:

2023-03-16 15:41:48.122  INFO 3356 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 4790 (http) with context path ''

指定使用測試環(huán)境下的配置文件

# 指定使用 application-test.yml 這個配置文件
spring:
  profiles:
    active: test

啟動 Spring Boot 應(yīng)用,控制臺輸出:

2023-03-16 15:42:21.462  INFO 24548 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 4791 (http) with context path ''

同理,指定使用生產(chǎn)環(huán)境的配置文件也是一樣的做法。

自定義的配置

在 Spring Boot 項目中,自定義配置是經(jīng)常用到的,我目前體會到的自定義的配置的作用有一點:配置與代碼解耦

下面,我們看看如何自定義配置,并使用自己自定義配置的值:

server:
  port: 4790

# 自定義的配置
demo:
  author: god23bin
  description: 點個免費的贊,我能開心好久!

上面自定義了兩個配置項,分別是 demo.authordemo.description,接著,如何在代碼中使用這些配置好的值呢?

目前使用這些配置好的值(讀取這些值),有以下幾種方式:

  • 使用 @Value
  • 使用 @ConfigurationProperties

@Value

我們寫一個普通的 Java 類,使用 Spring 提供的 @Value 來讀取這兩個值:

@Data
@Component
public class DemoCustomConfig {

    /**
     * 通過 @Value 注解讀取配置文件中的自定義配置項的值,使用 ${} 進行讀取
     **/
    @Value("${demo.author}")
    private String author;

    @Value("${demo.description}")
    private String description;

}

上面的代碼中,我在類上使用了 @Data@Component,@Data 是來自 Lombok 的,用于生成 getter 和 setter 方法,@Component 則將該類的實例對象交給 Spring 管理,接著在該類的兩個屬性上分別使用了 @Value 注解,通過 ${} 指定了我們要讀取的配置項。

進行測試,我們寫一個 Controller 判斷我們的讀取是否成功:

@RequestMapping("/demo")
@RestController
public class DemoController {

    @Autowired
    private DemoCustomConfig demoCustomConfig;

    @GetMapping("/getCustomValue")
    public ResponseEntity<String> getCustomValue() {
        return ResponseEntity.ok(demoCustomConfig.getAuthor() + "說:" + demoCustomConfig.getDescription());
    }
}

訪問該接口:localhost:4790/demo/getCustomValue

@ConfigurationProperties

@ConfigurationProperties 注解,它可以將配置文件中的的值綁定到 Java Bean 中,也就是通過這個 Bean 可以讀取到配置文件中配置的值,我們看看如何操作。

我們自定義一個用于讀取配置文件中配置項的類:

@Data
@Component
@ConfigurationProperties("system.demo")
public class SystemCustomConfig {

    private String name;

    private String version;

}

上面的代碼,主要使用了 @ConfigurationProperties 這個注解,并指定了前綴 system.demo,同時這個類有兩個屬性,name 和 version, 這樣就相當(dāng)于我們自定義了 system.demo.namesystem.demo.version 這兩個屬性。

接著,我們就能在配置文件中寫這兩個我們自定義的配置項了:

server:
  port: 4790

# 自定義的配置
system:
  demo:
    name: 超級系統(tǒng)
    version: 1.0

寫完這里的配置項,并不需要使用 @Value 去讀取,因為使用了 @ConfigurationProperties 注解,Spring 已經(jīng)幫我們搞定了配置的值的讀取,至于它的實現(xiàn)原理,這里先不深究。

進行測試,依然通過寫一個接口來測試我們通過:

@RequestMapping("/demo")
@RestController
public class DemoController {

    @Autowired
    private SystemCustomConfig systemCustomConfig;

    @GetMapping("/getSystemVersion")
    public ResponseEntity<String> getSystemVersion() {
        return ResponseEntity.ok(systemCustomConfig.getName() + "版本:" + systemCustomConfig.getVersion());
    }
}

訪問該接口:localhost:4790/demo/getSystemVersion

關(guān)于自動提示

不過,目前有個問題就是,我們自己寫了個 Java Bean 后,在配置文件中寫配置項的時候并沒有相關(guān)提示,這個就比較不友好,如果當(dāng)我們自己寫的配置想要給其他人用的話,別人都不知道有什么配置可以配。所以想要能像 Spring Boot 提供的配置提示一樣的話,就需要引入下面的依賴:

<!-- 配置文件處理器,配置文件進行綁定就會有提示 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

spring-boot-configuration-processor 是一個用于生成配置元數(shù)據(jù)的注解處理器。它會掃描使用 @ConfigurationProperties 注解的類和方法,來獲取配置參數(shù)并生成配置元數(shù)據(jù)。生成的配置元數(shù)據(jù)可以用于 IDE 的自動補全和提示功能。

如果你引入了這個依賴并且重啟該 Spring Boot 項目后,依舊沒有提示的話,嘗試開啟 IDEA 中的 annotaion processing

關(guān)于 Cannot resolve configuration property

對于我們自定義的配置,會出現(xiàn)這樣的提示:Cannot resolve configuration property(無法處理自定義的配置屬性),如下:

解決方式就是定義一下元數(shù)據(jù),用元數(shù)據(jù)來描述這個屬性。當(dāng)我們移動到這個配置項上時,出現(xiàn)提示,我們直接點擊 Define configuration key xxx 就可以幫我們生成一個關(guān)于配置的元數(shù)據(jù)文件。

additional-spring-configuration-metadata.json

{
  "properties": [
    {
      "name": "demo.author",
      "type": "java.lang.String",
      "description": "Demo的作者"
    },
    {
      "name": "demo.description",
      "type": "java.lang.String",
      "description": "Demo的描述"
    }
  ]
}

此時,還是一樣,重啟項目,如果黃色提示還是沒有去除的話,這里建議重新用 Maven 進行一次 clean,接著重新編譯整個項目,就可以了。于此同時,也具有了自動提示功能。

自定義配置文件

上面說的是自定義的配置,現(xiàn)在這里說自定義的配置文件,我們知道 Spring Boot 默認提供 application.properties 這個配置文件。那現(xiàn)在我們想自己寫一個配置文件,并且能在應(yīng)用中讀取這個配置文件的信息,該如何做呢?這里就涉及到 @PropertySource 這個注解了。

自定義的配置文件:

custom.yml

# 自定義的配置文件
version: 2.0
description: 求關(guān)注!

讀取該配置文件的配置類:

@Data
@Configuration
@PropertySource("classpath:custom.yml")
public class DemoPropertiesSourceConfig {

    @Value("${version}")
    private String version;

    @Value("${description}")
    private String description;

}

這樣,就能讀取到自己編寫的配置文件的配置信息了。

如果有多個自定義的配置文件,那么可以使用 @PropertySources 注解,可以看到最后面多加了一個 s ,說明這個單詞是復(fù)數(shù),通俗易懂。

@Configuration
@PropertySources({
    @PropertySource("classpath:custom1.yml"),
    @PropertySource("classpath:custom2.properties")
})
public class MyConfig {
    // ...
}

總結(jié)

  • 配置文件的兩種寫法:properties 和 yml

  • 項目中存在多個配置文件,可以使用 spring.profiles.active 屬性來切換使用哪個配置文件。

  • 自定義的一些配置屬性(配置項),如何讀取呢?可以在程序中通過 @Value 或者@ConfigurationProperties 來讀取。

  • 自定義的配置文件,可以通過 @PropertySource 來指定獲取該自定義配置文件的信息。

以上就是SpringBoot 配置文件總結(jié)的詳細內(nèi)容,更多關(guān)于SpringBoot 配置文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 完美解決Logback configuration error detected的問題

    完美解決Logback configuration error detected的問題

    這篇文章主要介紹了完美解決Logback configuration error detected的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解SpringMVC中的異常處理機制

    詳解SpringMVC中的異常處理機制

    本篇文章將為大家詳細介紹一下springmvc的異常處理機制,用到了ControllerAdvice和ExceptionHandler注解,感興趣的小伙伴可以了解一下
    2022-07-07
  • idea 2023.1字體設(shè)置及自動調(diào)整大小的圖文教程

    idea 2023.1字體設(shè)置及自動調(diào)整大小的圖文教程

    這篇文章主要介紹了idea 2023.1字體設(shè)置及自動調(diào)整大小的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Java制作驗證碼的完整實例代碼

    Java制作驗證碼的完整實例代碼

    這篇文章主要給大家介紹了關(guān)于Java制作驗證碼的完整實例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解JAVA中的Collection接口和其主要實現(xiàn)的類

    詳解JAVA中的Collection接口和其主要實現(xiàn)的類

    這篇文章主要介紹了JAVA中的Collection接口和其主要實現(xiàn)的類,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java實現(xiàn)石頭剪刀布游戲

    Java實現(xiàn)石頭剪刀布游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)石頭剪刀布游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Java 提取照片的EXIF信息批量重命名

    Java 提取照片的EXIF信息批量重命名

    這篇文章主要介紹了Java 提取照片的EXIF信息批量重命名的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • 通過JDK源碼分析關(guān)閉鉤子詳解

    通過JDK源碼分析關(guān)閉鉤子詳解

    一個簡單的關(guān)閉鉤子,程序被中斷或者正常退出時會顯示 hook shutdown!非常的優(yōu)雅,有效,巧妙。那么這篇文章就來給大家介紹關(guān)于通過JDK源碼分析關(guān)閉鉤子的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒。
    2017-11-11
  • Java同步框架AbstractQueuedSynchronizer詳解

    Java同步框架AbstractQueuedSynchronizer詳解

    本篇文章主要介紹了Java同步框架AbstractQueuedSynchronizer詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 將Java項目打包成可執(zhí)行的jar包

    將Java項目打包成可執(zhí)行的jar包

    這篇文章主要介紹了將Java項目打包成可執(zhí)行的jar包,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論