1、配置文件
1.1 SpringBoot使用一个全局的配置文件,配置文件名是固定的
•application.properties
•application.yml
1.2 相关依赖
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
1.3 配置文件中文乱码的问题解决
本项目乱码解决
所有项目
1.4 配置文件的作用:
修改SpringBoot自动配置的默认值,SpringBoot在底层都给我们自动配置好
YAML:
server:
port: 8888
XML:
<server>
<port>8888</port>
</server>
2、YAML语法:
2.1 基本语法
k:(空格)v :表示一对键值对
以 空格 的缩进来控制层级关系,并且大小写敏感
server:
port: 8888
path: /hello
2.2 值的写法
字面量:普通的值(数字,字符串,布尔)
k: v
1. 字符串默认不用加上单引号或者双引号
2. "" 双引号:不会转义字符串里面的特殊字符
3. '' 单引号:会转义特殊字符,时期变为普通的字符串
对象、Map(键值对–>属性: 值)
k: v
在下一行来写对象的属性和值的关系
person:
name: hanhan
age: 20
行内写法:
person: {name: hanhan,age: 20}
数组(List、Set)
用- 值表示数组中的一个元素
person:
- hanhan
- zhangsan
- lisi
行内写法
pets: [hanhan,zhangsan,lisi]
3、配置文件值注入
配置文件
person:
name: hanhan
age: 20
javaBean
@Component /*加入到容器*/
@ConfigurationProperties(prefix = "person")
/*将本类中的所有属性和配置文件中相关的配置进行绑定;
*prefix = "person":配置文件中person下面的所有属性进行一一映射
*/
public class Person {
private String name;
private Integer age;
3.1 @Value获取值和@ConfigurationProperties获取值比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
使用:
①获取一下配置文件中的某项值,使用**@Value**
②编写javaBean来和配置文件进行映射,使用**@ConfigurationProperties**
3.2 @PropertySource&@ImportResource&@Bean
@PropertySource:加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})
@Component
public class Person {}
@ImportResource:导入Spring的配置文件,让配置文件生效(注解在主程序上)
@ImportResource(locations = {"classpath:beans.xml"})
SpringBoot推荐使用全注解的方式添加组件
@Configuration /*代替Spring配置文件*/
public class MyAppConfig {
/*将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名*/
@Bean
public HelloService helloService02(){
System.out.println("配置类@Bean添加组件");
return new HelloService();
}
}
4、配置文件占位符的使用
随机数
${random.value}
${random.int}
${random.long}
${random.int(100)}
${random.int[1,32767]}
person.age=${random.int}
5、Profile
5.1 多Profile文件
主配置文件编写的时候,文件名可以是
application-{profile}.properties/yml
默认使用application.properties的配置;
5.2 yml支持多文档块方式
server:
port: 8088
spring:
profiles:
active: prod
---
server:
port: 8888
spring:
profiles: dev #指定属于哪个环境
5.3 激活指定profile三种方法
①在配置文件中指定 spring.profiles.active=dev
②命令行:java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
③虚拟机参数:-Dspring.profiles.active=dev
6、配置文件加载位置
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件
file:./config/
file:./
classpath:/config/
classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置,SpringBoot会从这四个位置全部加载主配置文件,并且互补配置
7、外部配置加载顺序
SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
1.命令行参数:java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --配置项=值
2.来自java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
6.由jar包外向jar包内进行寻找配置文件,先加载带profile后加载不带profile
7.@Configuration注解类上的@PropertySource
8.通过SpringApplication.setDefaultProperties指定的默认属性