SpringBoot配置文件
概述
初始化Spring Boot项目时,在resources
目录下有一个默认的全局配置文件 application.properties
。SpringBoot通过配置文件来修改SpringBoot自动配置的默认值
- SpringBoot支持两种格式的配置文件
application.yml
和application.properties
application.properties 写法
application.properties 配置文件写法如下
key = value
定义类型如下
- 定义属性
-
student.name=王五 student.age=23
-
- 定义数组(list、set)
-
student.course=Japanese,Chinese,Russian 或者如下方式 student.course[0]=Japanese student.course[1]=Chinese student.course[2]=Russian
-
- 定义map
-
student.family.fatherName=张三 student.family.motherName=李四 或者下面这种写法 student.family={"fatherName":"张三","motherName":"李四"}
-
- 引用其他配置属性
-
server.port=8080 server.path=127.0.0.1:${server.port}
-
application.yml 写法
application.yml 配置文件的语法是:key: value
使用冒号代替等号,同时冒号后面需要跟上一个空格符
定义类型如下
- 定义属性
-
student: name: 王五 age: 22
-
- 定义数组(list、set):用 - 值表示数组中的一个元素
-
student: course: - English - Chinese 或者行内写法 student: course: [English,Chinese]
-
- 定义map
-
student: family: fatherName: 张三 mother: 李四 或者行内写法 student: family: {"fatherName":"张三","mother":"李四"}
-
- 引用其他配置属性
-
server: port: 8080 path: 127.0.0.1:${server.port}
-
注意事项
- 字面直接写
- 字符串默认不用加上单引号或者双引号
- 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思,比如:name: "张三 \n 王五" 会出现换行
- 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据 ,比如:name: '张三 \n 王五' 不会出现换行
读取配置文件的值
使用配置文件中的值,有以下几种方式
- 使用
@Value
- 使用
@ConfigurationProperties
@Data
@Configuration
public class Student{
@Value("${student.name}")
private String name;
@Value("${student.age}")
private Integer age;
@Value("#{${student.family}}")
private Map<String,String> family;
@Value("${student.course}")
private List<String> course;
}
@Data
@Configuration
@ConfigurationProperties(prefix = "student")
public class Student{
private String name;
private Integer age;
private Map<String,String> family;
private List<String> course;
}
@ConfigurationProperties
注解向 Spring Boot 声明该类中的所有属性和配置文件中相关的配置进行绑定prefix = ""
声明配置前缀,将该前缀下的所有属性进行映射
@Component
或者@Configuration
将该组件加入 Spring Boot 容器,只有这个组件是容器中的组件,配置才生效
自定义配置文件
除了在默认的 application 文件进行属性配置,还可以自定义配置文件,在配置类中使用@PropertySource
注解注入该配置文件即可使用(该注解不支持注入yml文件)。例如如下配置文件 student.properties
student.name=王五
@Data
@Configuration
@ConfigurationProperties(prefix="student")
@PropertySource(value = "classpath:student.properties")
public class Student{
private String name;
}
@ImportResource
该注解导入 Spring 的 xml 配置文件,让配置文件里面的内容生效
@ImportResource(locations = {"classpath:StudentBeans.xml"})