1. 程式人生 > >Spring Boot 屬性配置

Spring Boot 屬性配置

big 1.5 順序 路徑 ont 系統環境 方式 dom org

屬性的配置在項目中經常被使用到,Spring Boot 相對spring框架配置文件對屬性進行配置簡化了很多。

一:屬性配置優先級

1.命令行參數
2.來自java:comp/env的JNDI屬性
3.Java系統屬性(System.getProperties())
4.操作系統環境變量
5.RandomValuePropertySource配置的random.*屬性值
6.jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
7.jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不帶spring.profile)配置文件
9.jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
10.@Configuration註解類上的@PropertySource
11.通過SpringApplication.setDefaultProperties指定的默認屬性

(1.1)命令行參數

通過java -jar myApp.jar --name="Spring Boot" --server.port=8081方式來傳遞參數。命令行參數在myApp.jar 後面設置。

(1.2)J2EE 上下文環境變量

(1.3)java系統變量

java -Dname="ws" -jar myApp.jar,設置name屬性為ws

如果設置java -Dname="ws" -jar app.jar --name="Boot" 由於命令行參數優先級高,則name屬性為Boot

(1.4)操作系統環境變量

操作系統環境變量如安裝JAVA和MAVEN時配置的JAVA_HOME,MAVEN_HOME等,這些都是操作系統的環境變量。

(1.5)隨機值

# 隨機字符串
com.ws.blog.value=${random.value}
# 隨機int
com.ws.blog.number=${random.int}
# 隨機long
com.ws.blog.bignumber=${random.long}
# 10以內的隨機數
com.ws.blog.test1=${random.int(10)}
# 10-20的隨機數
com.ws.blog.test2=${random.int[10,20]}

(1.6)@PropertySource

這個註解可以指定具體的屬性配置文

二:application.properties文件加載順序

1. 當前路徑下的/config子目錄。
2. 當前路徑。
3. classpath路徑下的/config子路徑。
4. classpath路徑

三:配置屬性類

(3.1) 采用@Value("${XXX}")配置

 1 @Configuration
 2 public class MyConfig {
 3     @Value("${ws.name}")
 4     private String name;
 5     @Value("${ws.age}")
 6     private Integer age;
 7 
 8     public String getName() {
 9         return name;
10     }
11 
12     public void setName(String name) {
13         this.name = name;
14     }
15 
16     public Integer getAge() {
17         return age;
18     }
19 
20     public void setAge(Integer age) {
21         this.age = age;
22     }
23 }

(3.2)采用@ConfigurationProperties 配置

首先在pom中添加如下依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

application.properties文件中添加如下配置

#My Config
ws.name=ws@ConfigurationProperties
ws.age=18
ws.listAddress[0]=add1
ws.listAddress[1]=add2

配置MyConfig類

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
@ConfigurationProperties(prefix = "ws")
public class MyConfig {

    private String name;

    private Integer age;

    private List<String> listAddress;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<String> getListAddress() {
        return listAddress;
    }

    public void setListAddress(List<String> listAddress) {
        this.listAddress = listAddress;
    }
}

Spring Boot 屬性配置