整个项目中所有重要的数据都是在配置文件中配置,如数据库的连接信息,项目的启动端口,用于发现和定位问题的普通日志和异常日志等等。配置文件可以分为两类
Spring Boot的配置文件可以分为 .properties和 .yml两种格式。.properties属于早期时代的格式,也是Spring Boot项目的默认配置文件。当一个项目中存在两种格式的配置文件,并且两个配置文件都设置了相同的配置项,但值不同,那么properties的优先级更高。通常在一个项目中只会存在一种格式的配置文件。
# 系统配置端口号
server.port=8888
# 自定义配置
name=zhangsan
@RestController
public class Controller {
@Value("${name}")//要和配置文件中的key值相同
private String name;
@PostConstruct
public void sayHi() {
System.out.println("hi: " + name);
}
}
:::info
yml的优点
稍微规模大点的公司都开始使用微服务,像字节内部有java,go,python,php语言,只关心业务是否能够实现,使用什么语言并不关心。如果使用properties配置文件就要写多份,而yml就很好的解决了这个问题。
key: value
注意:key和value之间使用冒号和空格组成
yml版本的连接数据库
#字符串
string.value: hello
#布尔值
boolean.value: true
boolean.value2: false
#整数
int.value: 10
#浮点数
float.value: 3.14
#空值,~表示Null
null.value: ~
读取配置文件中的基础类型使用@Value(“${}”)注解
@RestController
public class Controller {
//要和key值对应
@Value("${string.value}")
private String hello;
@PostConstruct
public void postConstruct() {
System.out.println(hello);
}
@Value("${boolean.value}")
private boolean bool;
@PostConstruct
public void postConstruct2() {
System.out.println(bool);
}
@Value("${null.value}")
private Integer integer;
@PostConstruct
public void postConstruct3() {
System.out.println(integer);
}
}
:::success
注意:value值加单/双引号
:::
string:
str1: hello \n Spring Boot
str2: 'hello \n Spring Boot'
str3: "hello \n Spring Boot"
@RestController
public class Controller {
@Value("${string.str1}")
private String str1;
@PostConstruct
public void construct1() {
System.out.println("str1: " + str1);
}
@Value("${string.str2}")
private String str2;
@PostConstruct
public void construct2() {
System.out.println("str2: " + str2);
}
@Value("${string.str3}")
private String str3;
@PostConstruct
public void construct3() {
System.out.println("str3: " + str3);
}
}
由上可知
#自定义一个对象,两种写法
#student:
# id: 1
# name: zhangsan
# age: 18
student: {id: 1, name: zhangsan, age: 18}
读取配置文件中的对象使用@ConfigurationProperties注解
@Component
//三种写法
//@ConfigurationProperties(value = "student")
//@ConfigurationProperties(prefix = "student")
@ConfigurationProperties("student")
@Data //需要提供get,set方法才能够把配置文件的信息读取出来
public class Student {
//类型和名字要一一对应
private int id;
private String name;
private int age;
}
#自定义集合
#list:
# array:
# - 1
# - 2
# - 3
list: {array: [1,2,3]}
读取配置文件中的集合使用@ConfigurationProperties
@Component
@ConfigurationProperties("list")
@Data
public class MyList {
private List<Integer> array;
}
在一个项目中有多种环境,如开发环境,测试环境,生产环境。每个环境的配置项都有所不同,如何让一个配置文件适应不同的环境呢?
把配置文件设为生产环境
spring:
profiles:
active: prod
server:
port: 9999
server:
port: 7777
此时使用的就是生产环境配置的端口号