尚硅谷SpringBoot视频 P10~P13
配置:通过如下其中一种中参数定义,可修改springboot中默认的参数
1、application.properties
如:server.port=8081
2、application.yaml,配置样例
server:
port: 8081
应用示例:
1 public class Person { 2 private String lastName; 3 private Integer age; 4 private Boolean boss; 5 private Date birth; 6 7 private Map<String ,Object> maps; 8 private List<Object> lists; 9 private Dog dog; 10 11 .... 12 } 13 14 public class Dog{ 15 private String name; 16 private Integer age; 17 ... 18 }
yaml配置如下:
1 person: 2 lastName: hello 3 age: 18 4 boss: false 5 birth: 2017/12/12 6 maps:{k1: v1, k2: 12} 7 lists: 8 - lisi 9 - zhaoliu 10 dog: 11 name: 小狗 12 age: 12
改造:增加注解,实现配置文件中属性映射到bean; @ConfigurationPeroperties(prefix = "person")
/**
* 将配置文件中配置的每个属性的值,映射到这个组件中
* @ConfigurationProperties 告诉 SpringBoot将本类中所有属性和配置文件中相关配置绑定
* prefix = "person" 配置文件中哪个下面的所有属性一一映射
*/
@Component
@ConfigurationPeroperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
.... // 包含getter/setter/toString方法
Pom.xml增加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!-- Spring Test 插件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
配置spring test类,验证效果
使用application.properties(先将原有yaml文件中使用#注释,可直接用快捷键 Ctrl+/实现快速屏蔽)
Person.last-name=lisi Person.age=18 Person.boss=false Person.birth=2019/12/12 Person.maps.k1=v1 Person.maps.k2=14 Person.lists=a,b,c
重新Test执行效果:
说明:如果配置文件中配置中文打印乱码,则是工程字符集问题(Properties文件模式GBK编码,需调整UTF-8),参考如下调整。
Properties中配置名字 你好,但是控制台打印 Person{lastName='���',
修正后的打印效果:
@Value 注解测试
测试
@Component //@ConfigurationProperties(prefix = "Person") public class Person { @Value("${Person.last-name}") private String lastName; @Value("#{11*2}") private Integer age; @Value("true") private Boolean boss; private Date birth;
执行效果:
@ConfigurationPeroperties : 批量注入文件中属性,不支持SpEL语法,JSR303校验
@Value: 一个个指定文件中属性;支持SpEL语法,不支持JSR303校验;不支持复杂类型注解(如map)
Validate JSR 303的使用:会提示lastName格式报错
两个注解使用场景的区别
如果仅在某个业务逻辑中获取配置文件中某个值,使用@Value;否则使用@ConfigurationPeroperties
在代码中实际应用
启动应用程序
测试结果: