虽然SpringBoot约定优于配置,但是在一些特殊情况下,我们依然需要自己定义一些配置,如数据库。下面我们就来研究下SpringBoot是如何配置的。
配置文件样式
SpringBoot中有两种格式的配置文件,properties和yaml。二者的优缺点如下:
- properties文件是无序的,比较繁琐
- yaml文件简介有序,而且在一些SpringCloud的配置中优势非常明显
- yaml文件不支持@PropertyResource注解
配置文件位置及优先级
生成的SpringBoot项目默认在resources目录生成application.properties配置文件,但这个配置文件的位置并不是唯一,一共有4个位置可以放置配置文件,优先级如下:
- 当前项目的根目录下的config目录下
- 当前项目根目录下
- 当前项目resources目录下的config目录下
- 当前项目resources目录下
配置文件的位置和默认名称可以通过IDEA的一些配置进行改变,但是笔者认为没有必要为了改变而改变,对此感兴趣的可以参考文末给出的江南一点雨的参考文章。
获取配置文件属性
自定义person类
@Component
@Data
public class Person {
private Long id;
private String name;
private int age;
}
application.properties配置文件中
person.id= 1
person.age= 15
person.name= zhangsan
采用Spring传统属性注入方式@Value
@Component
@Data
public class Person {
@Value("${person.id}")
private Long id;
@Value("${person.name}")
private String name;
@Value("${person.age}")
private int age;
}
注意: Person类要加上@Component交给Spring容器管理,否则无法注入。
application的配置文件中我们一般存放系统配置,这时我们一般采取引入person.properties文件,类似于数据库配置操作。在Spring中通常采用这种方式引入额外的配置文件
<context:property-placeholder location="classpath:person.properties"/>
在SpringBoot中我们只要加上@PropertySource("classpath:person.properties")。
yaml文件:yaml文件配置格式简洁有序,但是无法使用@PropertySource引入,下面演示下yaml文件
注入数组和javaBean集合的属性配置
配置文件:
my:
cities:
- beijing
- shanghai
java代码:
@Compent
@ConfigurationProperties(prefix = "my")
public class My{
private List<String> cities;
}
javaBean集合注入
配置文件:
provinces:
cities:
- name: xuzhou
lng: 120.23
lat: 33.45
- name: suzhou
lng: 120.26
lat: 28.45
java代码:
@Compent
@ConfigurationProperties(prefix = "provinces")
public class Provinces{
private List<City> cities;
}
安全获取属性
SpringBoot中引入了类型安全注入,当实体类的变量非常多时,使用类型安全注入能减少开发量,避免出错。
@Component
@Data
@PropertySource("classpath:person.properties")
@ConfigurationProperties(prefix = "person")
public class Person {
private Long id;
private String name;
private int age;
}
切换开发环境
在实际的项目开发中,我们需要不同的配置环境,标准格式:application-{环境}.yml
- 开发环境:application-dev.yml
- 测试环境:application-test.yml
- 生产环境:application-prod.yml
在application.yml中开启配置:
spring:
profiles:
active: dev
在application-dev.yml中:
server:
port: 8088
此时重启项目,项目的启动端口就从8080切换到8088了。
总结
配置文件是我们启动和熟悉项目的首要查看目标,后续笔记我们还会接触更多的配置。
参考资料:
江南一点雨:SpringBoot教程合集