1、SpringBoot配置文件
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
2、读取配置内容
在实际开发时,有时候需要做一些初始化的自定义配置,那么怎么在代码里面获取到配置文件的自定义配置,比如自定义配置name: zhangsan 。读取配置内容有如下三种方式:
@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
- @ConfigurationProperties
定义一个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]}
3、使用Profile多环境切换
在实际开发场景中,我们一般有开发、测试、生产环境,每个环节的某些配置会不一样,那么怎么来解决不同环境配置的问题,下面详细介绍使用Profile 多环境的切换。
profile 多环境配置方式:
- 多
profile 文件的方式,提供多个配置文件,每个文件代表一种环境。
- application-dev.properties/yml 开发环境
- application-test.properties/yml 测试环境
- application-prod.properties/yml 生产环境
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
至于激活的方式,就参考上面的测试即可。
|