[学习笔记] SpringBoot之SpringBoot配置文件
# 学习 # · 2021-04-18
SpringBoot配置文件
1、SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的:
(1)application.properties
(2)application.yml
2、application.properties配置文件:
# 应用名称
spring.application.name=springboot
# 应用服务 WEB 访问端口
server.port=8080
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.aduo.springboot.mybatis.entity
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/blue?serverTimezone=UTC
# 数据库用户名和密码:
spring.datasource.username=***
spring.datasource.password=***
yaml
1、yaml:以数据为中心,比 json、xml 等更适合做配置文件。
(1)以前的XML配置文件写法:
<server>
<port>8081</port>
</server>
(2)yaml配置文件的写法:
server:
port: 8081
2、yaml基本语法:
# 注意:冒号后面的空格不可省略
# ymal以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
# ymal属性和值对大小写敏感
k: v
3、值的写法:
# 字面量:普通的值(数字,字符串,布尔)
k: v
port: 8081
# 对象、Map(属性和值)(键值对)
friends:
lastName: zhangsan
age: 20
friends: { lastName: zhangsan, age: 18 }
# 数组(List、Set):用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
pets: [cat, dog, pig]
4、注入配置文件:
(1)编写一个实体类:Dog,实体类中有两个属性,name和age。
/**
* @Package: com.aduo.springboot.pojo
* @Description: Dog实体类
* @Author 多仔
*/
@Component //注册bean到容器中
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Dog {
private String name;
private Integer age;
}
(2)原生注入写法:使用@Value给bean注入属性值。
@Value("小狗")
private String name;
@Value("10")
private Integer age;
(3)SpringBoot的测试类下注入Dog并输出查看结果。
@SpringBootTest
class SpringbootApplicationTests {
@Autowired
Dog dog;
@Test
public void contextLoads() {
// Dog(name=小狗, age=10)
System.out.println(dog);
}
}
(4)新方法:使用yaml配置的方式进行注入。在yaml中配置相关属性:
dog:
name: 小狗
age: 20
(5)修改实体类,添加@ConfigurationProperties注解。
/**
* @ConfigurationProperties的作用:
* 将配置文件中配置的每一个属性值映射到这个组件中
* 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
* 参使prefix="dog":表示将配置文件中的dog下的所有属性一一对应
* 注意:只有这个组件是容器中的组件,才能使用该注解
**/
@ConfigurationProperties(prefix = "dog")
public class Dog {
private String name;
private Integer age;
}
(6)导入相关依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
(7)运行SpringBoot测试类,查看结果。
5、@ConfigurationProperties和@Value的比较:
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
(1)在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value。
(2)编写了 javaBean来和配置文件进行映射,使用@ConfigurationProperties。
6、配置文件占位符:
# 随机字符串
value: ${random.value}
# 随机int
value: ${random.int}
# 随机long
value: ${random.long}
# 10以内的随机数
value: ${random.int(10)}
# 10-20的随机数
value: ${random.int[1024,65536]}
7、其他方式加载配置文件:
// @PropertySource:加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})
// @ImportResource:导入Spring配置文件,让配置文件里面的内容生效
@ImportResource(locations = {"classpath:beans.xml"})
配置文件补充
1、配置文件加载位置:SpringBoot启动会扫描以下位置的application.properties或application.yml文件作为SpringBoot的默认配置文件。
– file:./config/
– file:./
– classpath:/config/
– classpath:/
(1)优先级由高到底,高优先级的配置会覆盖低优先级的配置,SpringBoot会从这四个位置全部加载主配置文件,实现互补配置。
(2)项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置。
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties
2、Profile:
(1)多环境切换:我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml , 用来指定多个环境版本。
(2)yaml多文档模块:
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: test
(3)激活指定的profile:
# 在application-dev.properties配置文件中
spring.profiles.active=dev
# 命令行
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
# 虚拟机参数
-Dspring.profiles.active=dev
如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/289/
评论