2-yaml語(yǔ)法和屬性綁定


SpringBoot使用一個(gè)全局的配置文件,文件名固定,二選一即可:

  • application.properties
  • application.yml

1. 基本語(yǔ)法

樣例:

server:
     port: 8080
  • k: v:表示一對(duì)鍵值對(duì)(冒號(hào)后的空格必須有)。
  • 且以空格的縮進(jìn)控制層級(jí)關(guān)系,只要是左對(duì)齊的一列數(shù)據(jù),都屬于同一層級(jí)。
  • 大小寫(xiě)敏感。
  • 字符串不用加上單引號(hào)或雙引號(hào)。
  • 對(duì)象、map:
friends:
   lastName: zhangsan
   age: 20

或者friends: {lastName: zhangsan,age: 18}

  • 數(shù)組:
pets:
  - cat
  - dog
  - pig

或者pets: [cat,dog,pig]

2. 屬性綁定

yml文件內(nèi)容:

person:
  name: zhangsan
  age: 20
  list: 
    - name: xiaobai
      age: 2
    - name: xiaohua
      age: 3

待綁定java對(duì)象:
核心@ConfigurationProperties(prefix = "person"),代表從yml文件中的person字段中拿數(shù)據(jù)。

//添加到容器中,以便@Autowired直接從容器中拿person對(duì)象
@Component
//從yml文件中綁定屬性
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private List<HashMap> list;

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

    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<HashMap> getList() {
        return list;
    }

    public void setList(List<HashMap> list) {
        this.list = list;
    }
}

person對(duì)象打印結(jié)果為:
Person{name='zhangsan', age='22', list=[{age=13, name=xiaobai}, {age=11, name=xiaolizi}]}

3. 配置文件處理器

編寫(xiě)配置文件時(shí)會(huì)有提示。pom文件導(dǎo)入插件:

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

4. @value

@value可以單獨(dú)的為某個(gè)屬性綁定配置文件得值,而@ConfigurationProperties為批量式綁定。

@Controller
public class HelloController {
    //屬性綁定
    @Value("${person.name}")
    String personName;
    //SpEL
    @Value("#{23-3}")
    String age;
    @Autowired
    Person person;
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        System.out.println(person);
        return personName+age;
    }
}

此處將會(huì)返回:張三20

5. 配置類(lèi)

//指明當(dāng)前類(lèi)是一個(gè)配置類(lèi),替代了Spring配置文件
@Configuration
public class MyAppConfig {
    //將方法的返回值添加到容器中,容器中組件的默認(rèn)id為方法名
    @Bean
    public HelloService helloService(){
        System.out.println("配置類(lèi)@Bean給容器里添加組件了...");
        return new HelloService();
    }
}

6.配置文件占位符

${random.uuid}、${random.int}、${random.long}${random.int(10)}、${random.int(1,10)}

server:
  port: 8081
person:
  name: zhangsan${random.uuid}
  age: ${random.int}
  list:
    - name: ${person.name}_xiaobai
      age: 13
    - name: ${person.name}_xiaolizi
      age: 11

輸出結(jié)果:Person{name='zhangsanb82979ef-da61-4c5b-ba7e-67d539de9668', age='-1926007151', list=[{age=13, name=zhangsan29f90cf1-3645-48b1-88ab-e61830bfa3b0_xiaobai}, {age=11, name=zhangsanc4aac9b1-a302-4e39-87ae-e4a4d8633796_xiaolizi}]}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容