SpringBoot2
1.配置文件作用
项目中所有重要的数据都是在配置文件中配置的
- 数据库的连接信息(包含用户名和密码设置)
- 项目的启动端口
- 第三方系统的调用秘钥等信息
- 用于发现和定位问题的普通日志和异常日志等
2.配置文件的分类
1.系统的配置文件,比如连接字符串,比如日志的相关设置,系统定义好的
2.用户自定义的
3. 配置文件的格式
Spring Boot 配置文件主要分为以下两种格式:
- .properties
- .yml
如下图所示
规则
1.一个项目中可以存下两种配置文件(properties 和 yml), 但是不建议一个项目中出现两种配置文件
2.当一个项目的某个配置,出现两种格式的配置文件中时,那么配置项会以 properties 为主(忽略 yml 中配置)
4.properties 配置文件说明
1.properties 基本语法
properties 是以键值的形式配置的, key 和 value 之间是以 "="连接的
#配置项目端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=1234
2.读取配置文件
如果在项目中,想要主动的读取配置文件的内容,可以使用@Value注解来实现.
@Value 注解使用"${}"的格式读取
@Component
public class ReadProperties {
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct(){
System.out.println("Read YML,port:" + port);
}
}
运行结果
5.yml配置文件说明
yml 特点:
- 写法简单,可读性高
- 支持更多的数据类型
- 跨语言使用: java/golang/高版本 python
yml 最大的优势是可以跨语言,不止是 Java 中可以使用 golang,python 都可以使用 yml 作为配置文件
1. yml 基本语法
yml 是树形结构的配置文件, 它的基础语法是"Key: value",注意 key 和 value 之间使用英文冒号加空格的方式组成的,其中空格不可省略
基础语法如下
#key: value
#连接数据库
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: 1234
2. yml 使用进阶
yml 配置不同数据类型及null
#字符常
string.value: 你好
#布尔值
boolean.value: true
boolean.value1: false
#整数
int.value: 10
#浮点数
float.value: 3.14159
#null
null.value: ~
yml配置读取
@Component
public class ReadYml {
@Value("${string.value}")
private String hello;
@PostConstruct
public void postConstruct(){
System.out.println("Read YMl,hello" + hello);
}
}
运行结果
注意事项: value 值加单双引号
application.yml 中配置如下信息
string:
str1: hello\nSpring boot.
str2: 'hello\nSpring boot.'
str3: "hello\nSpring boot"
读取程序实现代码
@Component
public class ReadYml {
@Value("${string.str1}")
private String hello;
@Value("${string.str2}")
private String hello1;
@Value("${string.str3}")
private String hello2;
@PostConstruct
public void postConstruct(){
System.out.println("Read YMl, " + hello);
System.out.println("Read YMl, " + hello1);
System.out.println("Read YMl, " + hello2);
}
}
运行结果:
结论:yml 中如果使用了双引号就会按照(原)语义执行,如果不加单双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义,比如\n->\n(转义)处理
yml 对象配置和读取
yml 中配置对象
student:
id: 1
name: Java
age: 18
#student: {id: 1,name: Java,age: 18}
此时不能用 @Value 来读取配置中的对象了,此时要使用另一个注解 @ConfigurationProperties来读取
@ConfigurationProperties(prefix = "student")
@Component
public class StudentComponent {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "StudentComponent{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
--------------------------------
@Data
@ConfigurationProperties(prefix = "student")
@Component
public class Student {
private int id;
private String name;
private int age;
}
调用类
@Component
public class ReadYml2 {
@Autowired
private StudentComponent studentComponent;
@PostConstruct
public void postConstruct(){
System.out.println(studentComponent);
}
}
运行结果
配置集合
yml配置文件
dbtypes:
name:
- mysql
- sqlserver
- db2
dbtypes2: {name: [mysql,sqlserver,db2]}
集合的读取和对象一样,也是使用@ConfigurationProperties来读取的,具题实现如下
@Data
@ConfigurationProperties(prefix = "dbtypes2")
@Component
public class ListConfig {
private List<String> name;
}
打印类的实现如下
@Component
public class ReadYml3 {
@Autowired
private ListConfig listConfig;
@PostConstruct
public void postConstruct(){
System.out.println(listConfig.getName());
}
}
运行结果