2-yaml语法和属性绑定


SpringBoot使用一个全局的配置文件,文件名固定,二选一即可:

  • application.properties
  • application.yml

1. 基本语法

样例:

server:
     port: 8080
  • k: v:表示一对键值对(冒号后的空格必须有)。
  • 且以空格的缩进控制层级关系,只要是左对齐的一列数据,都属于同一层级。
  • 大小写敏感。
  • 字符串不用加上单引号或双引号。
  • 对象、map:
friends:
   lastName: zhangsan
   age: 20

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

  • 数组:
pets:
  - cat
  - dog
  - pig

或者pets: [cat,dog,pig]

2. 属性绑定

yml文件内容:

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

待绑定java对象:
核心@ConfigurationProperties(prefix = "person"),代表从yml文件中的person字段中拿数据。

//添加到容器中,以便@Autowired直接从容器中拿person对象
@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对象打印结果为:
Person{name='zhangsan', age='22', list=[{age=13, name=xiaobai}, {age=11, name=xiaolizi}]}

3. 配置文件处理器

编写配置文件时会有提示。pom文件导入插件:

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

4. @value

@value可以单独的为某个属性绑定配置文件得值,而@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;
    }
}

此处将会返回:张三20

5. 配置类

//指明当前类是一个配置类,替代了Spring配置文件
@Configuration
public class MyAppConfig {
    //将方法的返回值添加到容器中,容器中组件的默认id为方法名
    @Bean
    public HelloService helloService(){
        System.out.println("配置类@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

输出结果: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}]}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容