SpringBoot配置文件
目录
- 配置文件的作用
- 配置文件的格式
- properties配置文件说明
- 基本语法
- 读取配置文件
- properties优点
- properties缺点
- yml配置文件说明
- yml基本语法
- 优点
- 缺点
- yml 使用进阶
- 配置不同数据类型及null
- 配置对象
- 配置集合
- properties 和 yml 的对比
- 为不同的环境设置配置文件
配置文件的作用
整个项目上,所有的重要数据都在配置文件中配置,例如
- 数据库的连接信息(用户名、密码)
- 项目的启动端口
- 第三方系统的调用密钥等信息
- 发现和定位问题的普通日志和异常日志
配置文件的格式
Spring Boot的配置文件分为两种格式:
- properties:老款(SpringBoot项目的默认文件格式)
- yml(yaml):新
【说明】
- 理论上properties和yml可以存在于一个项目中,但是实际的业务,通常采取一种统一的配置文件格式,这样可以更好的维护。
- 当properties和yml存在于一个项目中时,如果配置文件中存在相同的配置,这时以properties为主。properties 配置⽂件的优先级最⾼,但加载完 .properties ⽂件之后,也会加载 .yml ⽂件的配置信息.
properties配置文件说明
基本语法
properties 以键值的形式配置的, key和value之间以=
相连
配置项分类:
- 系统配置项(规定):比如server.port / spring.datasource.url
系统配置项https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties - 用户自定义配置(非系统配置项) key可以用户自定义。
# 配置项⽬端⼝号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
配置⽂件中使用 # 来添加注释信息。
properties默认不支持中文,我们需要把他更改成utf8
这里的setting需要设置两边,一个是当前项目的配置文件,另一个时所有新项目的配置文件
在setting下将其都改为utf8
读取配置文件
如果在项目中想要主动的读取配置文件中的内容,可以使用@value注解来实现。
@value注解使用 ${key}
格式读取
@Value("${javaclass}") // 一定是 ${key}
private String myConfigClass;
@RequestMapping("/sayHi")
public String sayHi() {
return "hello world ->" + myConfigClass;
}
properties优点
- 是系统默认的配置文件
- properties配置项的优先级高
- 格式简单,不容易出错
properties缺点
写法冗余
yml配置文件说明
yml 是 YAML 是缩写,全称 Yet Another Markup Language 翻译成中文就是:另⼀种标记语言。
yml基本语法
yml是树形结构的配置文件,他的基础语法是key: value
注意:key和value之间使用英文冒号加空格的方式组成,空格不可省略
server:
port: 9999
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/dbnamme?characterEncoding=utf8
username: root
password: 123
优点
- 可读性高,写法简单,语法类似JSON
- 支持更多的数据类型
- 支持更多的编程语言(Java、golang、PHP、python等)properties只有Java在用
缺点
书写容易出错
yml 使用进阶
配置不同数据类型及null
mystr1: 你\n好
mystr2: '你\n好'
mystr3: "你\n好"
@Value("${mystr1}")
private String str1;
@Value("${mystr2}")
private String str2;
@Value("${mystr3}")
private String str3;
@PostConstruct
public void doPostConstruct() {
System.out.println("-----start-----");
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println("-----end-----");
}
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~
配置对象
student:
id: 1
name: zhangsan
age: 18
⾏内写法
student: {id: 1,name: Java,age: 18}
读取对象中的某个值:
@Value("${student.name}")
private String name;
读取整个对象:@ConfigurationProperties
package com.example.demo.entity;
@ConfigurationProperties("student") //没有 $
@Component
@Setter
@Getter
@ToString
public class StudentComponent {
//这里的属性名一定要和配置项相对应
private int id;
private String name;
private int age;
}
@Autowired
private StudentComponent studentComponent;
配置集合
dbtypes1:
name:
- mysql
- sqlserver
- db2
dbtypes2: {name: [mysql,sqlserver,db2]}
properties 和 yml 的对比
- properties 是以key=value的形式配置的键值对类型配置文件;yml使用类似json格式
- properties是默认的配置文件格式,存在一定的冗余数据,yml可以解决数据冗余问题
- yml通用性更好,支持更多的数据类型
为不同的环境设置配置文件
需求:
开发环境dev端口号:6666
测试环境test端口号:7777
生产环境prod端口号:8888
spring boot不同平台的配置规则:
- 必须有主配置文件,主配置文件名必须是
application.yml
(.properties
) - 不同平台的配置文件,每个平台拥有一个配置文件,配置文件的名称要求application-xxx.后缀
# 主配置文件 存放的是公共发配置项
# 在application.yml中设置运行环境
spring:
profiles:
active: dev