springboot配置文件詳解

  在以前的項目開發中,咱們能夠使用xml,properties進行相關的配置,這種配置方式比較簡單,可是在應對複雜的商業需求下,多環境和編程化的配置沒法獲得知足,所以springboot爲咱們提供了YAML的配置方式豐富功能和簡化開發。spring

一、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)建立對應的實體類對象springboot

@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文件中使用隨機數app

  (1)在application.properties文件中添加以下屬性less

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)建立對應的測試類dom

@SpringBootTest
class ConfigApplicationTests {

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

  多環境配置編程語言

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

    雖然咱們能夠經過自動化運維部署的方式使用外部參數在服務啓動時臨時替換屬性值,但這也意味着運維成本增高。

  一、在resources目錄下建立多個配置文件

    application-dev.properties

    application-test.properties

    application-prod.properties

    application.properties

spring.profiles.active=dev/test/prod

二、YAML

  YAML是「YAML Ain't Markup Language YAML不是一種標記語言」的外語縮寫,但爲了強調這種語言以數據作爲中心,而不是以置標語言爲重點,而用返璞詞從新命名。它是一種直觀的可以被電腦識別的數據序列化格式,是一個可讀性高而且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。它是相似於標準通用標記語言的子集XML的數據描述語言,語法比XML簡單不少。

基本原則:
一、大小寫敏感 
二、使用縮進表示層級關係 
三、禁止使用tab縮進,只能使用空格鍵 
四、縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級。 
五、使用#表示註釋 
六、字符串能夠不用引號標註

  (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 + '\'' +
                '}';
    }
}

三、@ConfigurationProperties 與 @Value 對比

功能 @ConfigurationProperties @Value
鬆散綁定
元數據支持
spEL表達式
相關文章
相關標籤/搜索