1. 程式人生 > >SpringBoot .yml配置檔案

SpringBoot .yml配置檔案

相關介紹:

SpringBoot支援一種以.yml字尾結尾的配置檔案SpringBoot啟動時也會預設載入application.yml配置檔案。.propertie和.yml配置檔案同時存在時,SpringBoot會優先載入.yml(SpringBoot會把.yml轉化為.properties檔案)

.yml檔案是YAML 語言編寫的。YAML 是專門用來寫配置檔案的語言,非常簡潔和強大

快速入門:

application.yml

ymlEntity:
  #String  等價於properties中:ymlEntity.simpleTypeProp=simpleDataType
  simpleTypeProp: simpleDataType
  #陣列
  arrayTypeProp: 1,2,3,4,5,6,7,8
  #集合型別:List
  listTypeProp:
        - oneData
- twoData - threeData #集合型別:Map mapTypeProp: key1: value1 key2: value2 key3: value3 #複雜型別:List<Map> ListMapProp: - id: 123456 name: zjh - age: 18 addr: 海淀 #支援變數引用: - param: "${ymlEntity.simpleTypeProp},${ymlEntity.simpleTypeProp}"
student: {id: 12345, name: zjhTest,age: ~}

YmlEntity類引用配置項屬性值:因為是通過Get/Set方法把配置項給對應物件屬性賦值,所以必須生成Set/Get方法。

1、 key: value 中間的空格不可少。
2、 使用縮排表示層級關係
3、 縮排時不允許使用Tab鍵,只允許使用空格。
4、 縮排的空格數目不重要,只要相同層級的元素左側對齊即可。
5、 # 表示註釋,從這個字元一直到行尾,都會被解析器忽略。
6、 使用變數時”${ymlEntity.simpleTypeProp}”
7、 ~代表NULL
8、 字串value之中包含空格或特殊字元,需要放在引號之中。
9、 單引號和雙引號都可以使用,雙引號不會對特殊字元轉義。

public class Student {

    private Integer id;

    private String name;

    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

@Component
@ConfigurationProperties(prefix="ymlEntity")
public class YmlEntity {

    //@Value("${ymlEntity.simpleTypeProp}")
    private String simpleTypeProp;
    //@Value("${ymlEntity.arrayTypeProp}")
    private String [] arrayTypeProp;
    //@Value("${ymlEntity.listTypeProp}")
    private List<String> listTypeProp;
    //@Value("${ymlEntity.mapTypeProp}")
    private Map<String,String> mapTypeProp;
    //@Value("${ymlEntity.ListMapProp}")
    private List<Map<String,String>> ListMapProp;
    //@Value("${ymlEntity.student}")
    private Student student;


    public void setSimpleTypeProp(String simpleTypeProp) {
        this.simpleTypeProp = simpleTypeProp;
    }

    public void setArrayTypeProp(String[] arrayTypeProp) {
        this.arrayTypeProp = arrayTypeProp;
    }

    public void setListTypeProp(List<String> listTypeProp) {
        this.listTypeProp = listTypeProp;
    }

    public void setMapTypeProp(Map<String, String> mapTypeProp) {
        this.mapTypeProp = mapTypeProp;
    }

    public void setListMapProp(List<Map<String, String>> listMapProp) {
        ListMapProp = listMapProp;
    }

    public String getSimpleTypeProp() {
        return simpleTypeProp;
    }

    public String[] getArrayTypeProp() {
        return arrayTypeProp;
    }

    public List<String> getListTypeProp() {
        return listTypeProp;
    }

    public Map<String, String> getMapTypeProp() {
        return mapTypeProp;
    }

    public List<Map<String, String>> getListMapProp() {
        return ListMapProp;
    }
    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }
}

@Value測試失敗。@Value註解不支援.yml
@ConfigurationProperties(prefix=”ymlEntity”)註解在建立Bean時會把該字首的配置項與屬性值一一對應賦值。需要新增Maven依賴:

<!-- 支援 @ConfigurationProperties 註解 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

DemoApplicationTests

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    private YmlEntity   ymlEntity;

    @Test
    public void contextLoads() {
        System.out.println("ymlEntity.simpleTypeProp:"+ymlEntity.getSimpleTypeProp());
        System.out.println("ymlEntity.arrayTypeProp:"+ JSON.toJSONString(ymlEntity.getArrayTypeProp()));
        System.out.println("ymlEntity.listTypeProp:"+ymlEntity.getListTypeProp());
        System.out.println("ymlEntity.mapTypeProp:"+ymlEntity.getMapTypeProp());
        System.out.println("ymlEntity.ListMapProp:"+ymlEntity.getListMapProp());
        System.out.println("ymlEntity.student:"+ymlEntity.getStudent().toString());

    }
}