SpringBoot配置文件

一、SpringBoot配置文件

SpringBoot配置文件,對於SpringBoot的默認配置來講,若是默認配置不適用實際運用的場景狀況下,可使用配置文件覆蓋默認配置,好比內嵌的Tomcat默認端口是8080,就可使用配置文件將默認配置覆蓋。另外咱們在項目中,有可能封裝一些通用SDK,也可使用配置文件來處理。
SpringBoot支持的配置能夠查看官網文檔:application-propertiesjava

SpringBoot提供了兩種配置文件類型:propertiesyml(而yml也能夠寫成yaml)。默認配置文件名稱爲:application,放在resources目錄下。這兩種配置文件在同一級的優先級爲:properties>yml>yamlspring

好比把默認端口改成8088,上面訪問路徑爲http://localhost:8080/v1/index,按照以前的習慣,一般是主機後面會跟項目名,也能夠經過配置文件配置。數組

使用yaml方式配置:app

server:
  servlet:
    context-path: /spring-boot
  port: 8088

注意:yaml的配置方式:號後面必須有空格。ide

簡單介紹下yaml的基本語法:spring-boot

  • 大小寫敏感
  • 數據值前面必須有空格(也就是:號後面),做爲分隔符
  • 使用縮進表示層級關係
  • 縮進時不容許使用Tab鍵,只容許使用空格(由於各個系統Tab對應的空格數目可能不一樣,致使層級混亂)
  • 縮進的空格數目不重要,只要相同層級的元素左對齊就行
  • #表示註釋,從這個字符到行尾,都會被解析器忽略

yaml的數據格式:測試

  • 對象(map): 鍵值對的集合
person:
  name: lisi

# 行內寫法
person: {name: lisi}
  • 數組:一組按次排列的值
names:
  - zhangsan
  - lisi

# 行內寫法
names: [zhangsan,lisi]
  • 純量:單個的、不可再分的值
msg1: `hello \n world` #單引號忽略轉義字符
msg2: "hello \n world" #雙引識別轉義字符

yaml參數引用:
有時候在配置一個參數,想被多個地方引用,能夠這樣配置:插件

name: zhangsan
person:
  name: ${name} #引用上面定義的name的值

使用properties配置:命令行

server.servlet.context-path=/spring-boot
server.port=8088

注意:配置context-path必須是/開頭日誌

啓動項目從日誌輸出:

Tomcat started on port(s): 8088 (http) with context path '/spring-boot'

這個時候咱們的訪問路徑就是:http://localhost:8088/spring-boot/v1/index

二、讀取配置內容

在實際開發時,有時候須要作一些初始化的自定義配置,那麼怎麼在代碼裏面獲取到配置文件的自定義配置,好比自定義配置name: zhangsan。讀取配置內容有以下三種方式:

  • 使用註解@Value
@Value("${name:lisi}")
private String name;

@GetMapping(path = "")
public String index(){
    return String.format("Hello %s Spring Boot!",name);
}

訪問結果:Hello zhangsan Spring Boot!,使用@Value註解就能夠獲取配置文件的自定義配置,:後面表示默認值,若是配置文件沒有配置,則取默認值。

  • Environment
@Autowired
private Environment environment;

System.out.println(String.format("使用Environment獲取配置name:%s",environment.getProperty("name")));

輸出結果:使用Environment獲取配置name:zhangsan

  • @ConfigurationProperties
    定義一個User
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class User {
    private String name;
    private int age;
    private List<String> address;
    
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

必須使用@Component@ConfigurationProperties註解,@Data是使用了lombok插件。若是須要使用lombok,須要在IDEA安裝Lombok插件,引入lombok依賴

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

配置文件以下配置:

user:
  name: zhangsan
  age: 12
  address:
   - sichuang
   - hunan

controller中使用

@Autowired
private User user;

System.out.println(user.toString());

輸出結果:User{name='admin', age=12, address=[sichuan, hunan]}

三、使用Profile多環境切換

在實際開發場景中,咱們通常有開發、測試、生產環境,每一個環節的某些配置會不同,那麼怎麼來解決不一樣環境配置的問題,下面詳細介紹使用Profile多環境的切換。

profile多環境配置方式:

  • profile文件的方式,提供多個配置文件,每一個文件表明一種環境。
    • application-dev.properties/yml 開發環境
    • application-test.properties/yml 測試環境
    • application-prod.properties/yml 生產環境
  • yml多文檔方式:
    • 在yml配置文件中使用---分割不一樣配置

profile激活多環境方式:

  • 配置文件,在配置文件使用配置spring.profiles.active=dev
  • 虛擬機參數:在IDEAVM options指定:-Dspring.profiles.active=dev
  • 命令行參數:
    • 打包狀況下:java -jar xxx.jar --spring.profiles.active=dev
    • 使用IDEA下的Program arguments指定:--spring.profiles.active=dev

多文件的方式這裏就不作操做了,上面介紹已經說明了,按照標準的文件格式命名就行,根據實際狀況選擇是用properties仍是yml的方式。下面介紹下yml多文檔的方式:

# 開發環境
---
spring:
  config:
    activate:
      on-profile: dev
server:
  port: 8081
# 測試環境
---
spring:
  config:
    activate:
      on-profile: test
server:
  port: 8082
# 生產環境
---
spring:
  config:
    activate:
      on-profile: prod
server:
  port: 8082
---
# 公用配置
server:
  servlet:
    context-path: /spring-boot

至於激活的方式,就參考上面的測試便可。

相關文章
相關標籤/搜索