1. 程式人生 > 其它 >springboot配置檔案詳解

springboot配置檔案詳解

  在之前的專案開發中,我們可以使用xml,properties進行相關的配置,這種配置方式比較簡單,但是在應對複雜的商業需求下,多環境和程式設計化的配置無法得到滿足,因此springboot為我們提供了YAML的配置方式豐富功能和簡化開發。

1、Properties配置詳解

  通常情況下,我們可以使用properties檔案進行相關的配置。

  (1)在resources目錄下建立application.properties

person.name=zhangsan
person.age=12
person.gender=男
person.desc=my name is ${person.name},my age is ${person.age}

  (2)建立對應的實體類物件

@Component
public class Person {
    @Value("${person.name}")
    private String name;
    @Value("${person.age}")
    private int age;
    private String sex;
    @Value("${person.desc}")
    private String desc;

    public Person() {
    }

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
} 

  (3)建立對應的測試類

@SpringBootTest
class ConfigApplicationTests {

    @Autowired
    Person person;
    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

  可以在properties檔案中使用隨機數

  (1)在application.properties檔案中新增如下屬性

my.secret=${random.value}
my.number=${random.int}
my.bignumber
=${random.long} my.uuid=${random.uuid} my.number.less.than.ten=${random.int(10)} my.number.in.range=${random.int[1024,65536]}

  (2)建立對應的實體類

@Component
public class My {
    @Value("${my.secret}")
    private String screct;
    @Value("${my.number}")
    private int number;
    @Value("${my.bignumber}")
    private long bignumber;
    @Value("${my.uuid}")
    private UUID uuid;
    @Value("${my.number.less.than.ten}")
    private int lessThanTen;
    @Value("${my.number.in.range}")
    private int numberInRangel;

    @Override
    public String toString() {
        return "My{" +
                "screct=" + screct +
                ", number=" + number +
                ", bignumber=" + bignumber +
                ", uuid=" + uuid +
                ", lessThanTen=" + lessThanTen +
                ", numberInRangel=" + numberInRangel +
                '}';
    }
}

  (3)建立對應的測試類

@SpringBootTest
class ConfigApplicationTests {

    @Autowired
    My my;
    @Test
    void contextLoads() {
        System.out.println(my);
    }
}

  多環境配置

    在實際開發中,我們的一套程式碼可能會被同時部署到開發、測試、生產等多個伺服器中,每個環境中諸如資料庫密碼等這些個性化配置是避免不了的,

    雖然我們可以通過自動化運維部署的方式使用外部引數在服務啟動時臨時替換屬性值,但這也意味著運維成本增高。

  1、在resources目錄下建立多個配置檔案

    application-dev.properties

    application-test.properties

    application-prod.properties

    application.properties

spring.profiles.active=dev/test/prod

2、YAML

  YAML是“YAML Ain't Markup Language YAML不是一種標記語言”的外語縮寫,但為了強調這種語言以資料做為中心,而不是以置標語言為重點,而用返璞詞重新命名。它是一種直觀的能夠被電腦識別的資料序列化格式,是一個可讀性高並且容易被人類閱讀,容易和指令碼語言互動,用來表達資料序列的程式語言。它是類似於標準通用標記語言的子集XML的資料描述語言,語法比XML簡單很多。

基本原則:
1、大小寫敏感 
2、使用縮排表示層級關係 
3、禁止使用tab縮排,只能使用空格鍵 
4、縮排長度沒有限制,只要元素對齊就表示這些元素屬於一個層級。 
5、使用#表示註釋 
6、字串可以不用引號標註

  (1)使用yaml完成多環境配置:application.yaml

spring:
  profiles:
    active: test
---
spring:
  profiles: dev
server:
  port: 8080
---
spring:
  profiles: test
server:
  port: 8081

  (2)使用yaml進行相關引數的設定

person:
  name: zhangsan
  age: 12
  sex: 男
  desc: my name is ${person.name},my age is ${person.age}

  對應的實體類物件

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
//    @Value("${person.name}")
    private String name;
//    @Value("${person.age}")
    private int age;
    private String sex;
//    @Value("${person.desc}")
    private String desc;

    public Person() {
    }

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

3、@ConfigurationProperties 與 @Value 對比

功能@ConfigurationProperties@Value
鬆散繫結
元資料支援
spEL表示式