yaml/yml语法

spring官方推荐使用application.yaml代替application.properties,因为yaml更加强大

properties语法:key=value ,例如

server.port=8080

yaml语法:key:空格value,例如

server:
	port: 8080

yaml基础语法

  • 对空格要求严格,不能省略
  • 以缩进控制层次结构,左对齐的属于同一层次
  • 大小写敏感

“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;

比如 :name: “kuang \n shen” 输出 :kuang 换行 shen

‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出

比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen

对象

student:
	name: abc
	age: 18
	
//或者

student {name: abc,age: 18}

list

fruits:
	- apple
	- organge
	- banana
	
//或者

fruits: [apple,orange,banana]

yaml注入配置文件

创建application.yaml,以上述对象为例

student:
	name: abc
	age: 18

新建一个实体类Student

@Components   //注册bean到容器中
Public class Student{
	private String name;
	private int age;
	
//set,get方法,toSting方法,有参无参构造函数
}

以往给bean注入属性值的方法

Public class Student{

	@value("abc")  
	private String name;
	
	private int age;
}

用yaml的方法

/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “student” : 将配置文件中的student下面的所有属性一一对应
*/

@Component //注册bean
@ConfigurationProperties(prefix = "student")
Public class Student{
	private String name;
	private int age;
	
//set,get方法,toSting方法,有参无参构造函数
}

如果出现IDEA 提示,springboot配置注解处理器没有找到,则需要在poem.xml中写入依赖文件

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

然后在测试类测试

@SpringBootTest
class DemoApplicationTests {

    @Autowired
   Student student; //将student自动注入进来

    @Test
    public void contextLoads() {
        System.out.println(student); //打印student信息,得到student.name=abc,student.age=18
    }

}

yaml可以方便选择多环境配置

使用properties需要创建多个application-xxx.properties,然后在application.properties中选择需要配置的环境

#多环境配置,选择要激活的配置文件
spring.profiles.active=test

使用yaml可以只在一个application中配置多环境

#选择激活配置文件
spring:
  profiles:
    active: test

---
server:
  port: 8081
spring:
  profiles: dev

---
server:
  port: 8082
spring:
  profiles: test

对比

@ConfigurationProperties@Value
可以批量注入数据只能一个一个注入
支持松散语法不支持松散语法
支持JSR30数据校验不支持
可以封装复杂类型不支持
不支持SpEL支持

1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

2、松散绑定:意思就是 比如yml中写的last-name,和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。

3、JSR303数据校验 , 可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

结论:

配置yml和配置properties都可以获取到值 , 强烈推荐 yml;

如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;

如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!

posted @ 2022-01-11 16:27  ︶ㄣ演戲ㄣ  阅读(4)  评论(0编辑  收藏  举报  来源