SpringBoot
配置文件,对于SpringBoot
的默认配置来说,如果默认配置不适用实际运用的场景情况下,可以使用配置文件覆盖默认配置,比如内嵌的Tomcat
默认端口是8080
,就可以使用配置文件将默认配置覆盖。另外我们在项目中,有可能封装一些通用SDK,也可以使用配置文件来处理。
SpringBoot
支持的配置可以查看官网文档:application-properties
SpringBoot
提供了两种配置文件类型:properties
和yml
(而yml
也可以写成yaml
)。默认配置文件名称为:application
,放在resources
目录下。这两种配置文件在同一级的优先级为:properties
>yml
>yaml
比如把默认端口改为8088
,上面访问路径为http://localhost:8080/v1/index
,按照之前的习惯,通常是主机后面会跟项目名,也可以通过配置文件配置。
使用yaml
方式配置:
server: servlet: context-path: /spring-boot port: 8088
注意:
yaml
的配置方式:
号后面必须有空格。
简单介绍下yaml
的基本语法:
:
号后面),作为分隔符Tab
键,只允许使用空格(因为各个系统Tab
对应的空格数目可能不同,导致层级混乱)#
表示注释,从这个字符到行尾,都会被解析器忽略yaml
的数据格式:
person: name: lisi # 行内写法 person: {name: lisi}
names: - zhangsan - lisi # 行内写法 names: [zhangsan,lisi]
msg1: `hello \n world` #单引号忽略转义字符 msg2: "hello \n world" #双引识别转义字符
yaml
参数引用:
有时候在配置一个参数,想被多个地方引用,可以这样配置:
name: zhangsan person: name: ${name} #引用上面定义的name的值
使用properties
配置:
server.servlet.context-path=/spring-boot server.port=8088
注意:配置
context-path
必须是/
开头
启动项目从日志输出:
Tomcat started on port(s): 8088 (http) with context path '/spring-boot'
这个时候我们的访问路径就是:http://localhost:8088/spring-boot/v1/index
在实际开发时,有时候需要做一些初始化的自定义配置,那么怎么在代码里面获取到配置文件的自定义配置,比如自定义配置name: zhangsan
。读取配置内容有如下三种方式:
@Value
@Value("${name:lisi}") private String name; @GetMapping(path = "") public String index(){ return String.format("Hello %s Spring Boot!",name); }
访问结果:Hello zhangsan Spring Boot!
,使用@Value
注解就可以获取配置文件的自定义配置,:
后面表示默认值,如果配置文件没有配置,则取默认值。
@Autowired private Environment environment; System.out.println(String.format("使用Environment获取配置name:%s",environment.getProperty("name")));
输出结果:使用Environment获取配置name:zhangsan
User
类@Component @ConfigurationProperties(prefix = "user") @Data public class User { private String name; private int age; private List<String> address; @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", address=" + address + '}'; } }
必须使用@Component
和@ConfigurationProperties
注解,@Data
是使用了lombok
插件。如果需要使用lombok
,需要在IDEA安装Lombok
插件,引入lombok
依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
配置文件如下配置:
user: name: zhangsan age: 12 address: - sichuang - hunan
在controller
中使用
@Autowired private User user; System.out.println(user.toString());
输出结果:User{name='admin', age=12, address=[sichuan, hunan]}
在实际开发场景中,我们一般有开发、测试、生产环境,每个环节的某些配置会不一样,那么怎么来解决不同环境配置的问题,下面详细介绍使用Profile
多环境的切换。
profile
多环境配置方式:
profile
文件的方式,提供多个配置文件,每个文件代表一种环境。
yml
多文档方式:
---
分割不同配置profile
激活多环境方式:
spring.profiles.active=dev
IDEA
的VM options
指定:-Dspring.profiles.active=dev
java -jar xxx.jar --spring.profiles.active=dev
IDEA
下的Program arguments
指定:--spring.profiles.active=dev
多文件的方式这里就不做操作了,上面介绍已经说明了,按照标准的文件格式命名就行,根据实际情况选择是用properties
还是yml
的方式。下面介绍下yml
多文档的方式:
# 开发环境 --- spring: config: activate: on-profile: dev server: port: 8081 # 测试环境 --- spring: config: activate: on-profile: test server: port: 8082 # 生产环境 --- spring: config: activate: on-profile: prod server: port: 8082 --- # 公用配置 server: servlet: context-path: /spring-boot
至于激活的方式,就参考上面的测试即可。