使用
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
语法结构 :key:空格 value
server:
prot: 8080
“ ” 双引号,转义字符串还是有转义作用
‘’ 单引号,特殊字符最终会变成和普通字符一样输出
对象、Map(键值对)
#对象、Map格式
k:
v1:
v2:
//行内写法
student: {name: qinjiang,age: 3}
数组( List、set )
pets:
- cat
- dog
- pig
yaml注入配置文件
1.在springboot项目中的resources目录下新建一个文件 application.yml
2.编写一个实体类
3.原来是使用@Value给bean注入属性值的!
现在,
@ConfigurationProperties(prefix = "person")
application.yml
person:
name: qinjiang
age: 3
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 旺财
age: 1
4.IDEA 提示,springboot配置注解处理器没有找到
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
5.测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
Person person; //将person自动注入进来
@Test
public void contextLoads() {
System.out.println(person); //打印person信息
}
}
对比
对比properties配置
user.properties
user1.name=kuangshen
user1.age=18
user1.sex=男
在User类上使用@Value来进行注入
@Component //注册bean
@PropertySource(value = "classpath:user.properties")
public class User {
//直接使用@value
@Value("${user.name}") //从配置文件中取值
private String name;
@Value("#{9*2}") // #{SPEL} Spring表达式
private int age;
@Value("男") // 字面量
private String sex;
}
测试类
@SpringBootTest
class DemoApplicationTests {
@Autowired
User user;
@Test
public void contextLoads() {
System.out.println(user);
}
}
1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。
3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
4、复杂类型封装,yml中可以封装对象 , 使用value就不支持
JSR303数据校验
实体类的注解
@Validated
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
.......等等
除此以外,我们还可以自定义一些数据校验规则
总结,可以点入注解中看,看它的包下面有哪些注解,一通全通哦
多环境配置
配置文件加载位置
配置位置文件优先级为以上顺序
多配置文件
文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本
例如:
application-test.properties 代表测试环境配置
application-dev.properties 代表开发环境配置
但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件;
我们需要通过一个配置来选择需要激活的环境:
spring.profiles.active=dev
spring:
profiles:
active: pro
yaml的多文档块
相当于properties的多个配置文件
server:
port: 8081
#选择要激活那个环境块
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev #配置环境的名称
---
server:
port: 8084
spring:
profiles: prod #配置环境的名称
拓展,运维
还可以通过spring.config.location来改变默认的配置文件位置
java -jar spring-boot-config.jar --spring.config.location=F:/application.properties
相同配置,外部指定的配置文件优先级最高