导入解析配置文件
1.YAML(7.2.5)
1.YAML是一种高级的JSON支持
2.SpringApplication类自动支持YAML作为一种可选的属性配置文件
3.YAML是层级结构,而properties是平级结构
1.用缩进表示层级关系
2.缩进时只可以使用空格
3.空格数不重要,只要同层的元素左对齐即可
4.大小写敏感
1.对象:键值对集合Map... -->注意缩进
行内:- object: {key1: value1,key2: value2}
行外:object:
key1: value1
key2: value2
2.数组:List...
行内:- arrays: [value1,value2]
行外:- arrays:
- value1
- value2
-
3.字面量:不可再分的值
字符串:默认不加"" ''
加""不会转义特殊字符,即该换行换行
加''会转义特殊字符,即当成普通的字符串
4.多文档:一个yml文件中可以有多个配置文档,使用----隔开即可
1.导入的是默认配置文件application.yml或application.properties
2.批量注入
3.松散绑定:(属性)firstName --> (配置文件)firstName/first-name/first_name/FIRSTNAME
4.不支持spEL:不支持注入计算后的值-->price: 10*10
5.支持属性自动注入
--------------------------------------------
@Component
@Data
@ConfigurationProperties(prefix = "product")
public class Product {
private String pname;
private Double price;
private Boolean isUsed;
private Date manDate;
private List<String> types;
private Map<String, String> attributes;
private Address address;
}
-----application.yml----------------------------
product:
pname: apple
price: 3000
is-used: true
man-date: 2022/03/06
type:
- 消费手机
- 手机
- 移动设备
attributes: {'color': 'white','com-type': '5G'}
address:
province: 湖南省
city: 长沙
-----application.properties---------------------
product.pname=apple
product.price=3000
product.is-used=true
product.man-date=2022/03/06
product.type=消费手机,手机,移动设备
product.attributes.color=white
product.attributes.com-type=5G
product.address.province=湖南省
product.address.city=长沙
product:
pname: apple${random.int(12)}
price: 3000
is-used: true
man-date: 2022/03/06
types:
- 消费手机${product.pname}
- 手机
- 移动设备
attributes: {'color': 'white','com-type': '5G'}
address:
province: 湖南省
city: 长沙
2.类型安全的配置属性(7.2.8)
- @Configuration+@PropertySource+@Value
1.导入的是自定义的properties的配置文件
2.单个注入
3.有限支持松散绑定 @Value中的name需要与配置文件中的完全一致
4.支持spEL:@Value("#{10*10}")
5.属性不支持自动注入,使用@value手动注入
6.与@Configuration配合使用
--------------------------------------------
@Configuration
@PropertySource(value = "classpath:db.properties")
public class DbCon{
@Value("${db.driver_name}")
private String driver_name;
@Value("${db.url}")
private String url;
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
}
-----db.properties----------------------------
db.driver_name=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@
db.username=scott
db.password=a
3.传统的xml配置文件
导入外部传统的spring的xml文件,引入xml的配置
注意:@Import引入外部配置类,@SpringBootApplication只能扫描到同级或子级的配置类
--------------------------------------------
@ImportResource(locations = {"classpath:beans.xml"})
-----beans.xml----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="banana" class="com.yc.bean.Banana"></bean>
</beans>
Profiles 配置项(7.3)
1.概述
- 多环境配置与部署
- 作用:限制环境(生产环境+线上…),即决定配置文件在什么时候起作用
- 命令行的参数覆盖配置文件的参数
2.多环境
开发环境:dev
测试环境:test
生产环境:prod
3.配置文件的命名规范
application-{profile}.properties
test prod pre-prod demo1.0
系统默认配置application.properties
上面的多环境配置文件会重写这个文件
4.激活
1.任何配置类上加@Profiles("test")限定
配置文件
不同配置文件: application-dev.properties/application-test.properties
默认配置文件: 指定不同profiles类型 -> 指定哪些配置文件处于活动状态
spring:
profiles:
active: test
-->多配置块方式----
2.-Dspring.profiles.active = prod:虚拟机参数方式
jar部署:java -jar -Dspring.profiles.active = prod
-->hello.jar
3.--spring.profiles.active = dev:命令行参数方式
jar部署:java -jar hello.jar --spring.profiles.active = prod
优先级:321
5.取配置文件
java -jar -Dspring.config.location = file:configpath/ -Dspring.profiles.active = test targetJarName.jar
6.配置文件优先级
7.外部配置加载顺序
|