SpringBoot中的配置文件分离
0.背景
idea中新建好springboot项目后,默认的配置文件是放在resource目录下的,这个时候进行打包,配置文件会打包到jar中,每次更新配置信息都需要重新打jar包部署,比较麻烦.
目的:将配置文件分离,其他位置存放好配置文件后,在启动jar时指定配置文件,实现灵活切换
1.默认的配置文件
1.1 application.properties
SpringBoot程序默认从application.properties
或者application.yaml
读取配置,且application.properties>application.yaml
外置配置文件
Spring程序会按优先级从下面这些路径来加载application.properties配置文件
- 当前目录下的/config目录
- 当前目录
- classpath里的/config目录
- classpath 跟目录
eg:在jar所在目录新建config文件夹,然后放入配置文件,或者直接放在配置文件在jar目录.
1.2 application-xx.properties
不同环境设定一个配置文件,带
application-
前缀都会识别成默认的.
eg:application-dev.properties、application-prod.properties
1.3 启动命令
java -jar xx.jar --spring.profiles.active=dev
1.4 扩展
1.你也可以直接在application.properties中指定使用哪一个文件
spring.profiles.active = dev
启动时,会自动根据填写的参数值,读取对应的配置文件进行加载.
2.如果图里application.properties文件和日志文件也想外置?
- 把application.properties也放到config目录里去
- 在application.properties文件或使用的环境properties文件中指明志配置文件路径
#### 日志配置文件路径
logging.config=./config/log4j2.xml
2.自定义的配置文件
2.1 启动时指定
多个配置文件用英文逗号分隔
# 需要在classpath目录中
java -jar xxx.jar --spring.config.location=classpath:/自定义配置文件1.properties,classpath:/自定义配置文件2.properties
# 绝对路径指定
java -jar xxx.jar --Dspring.config.location=绝对路径\自定义配置文件3.properties
2.2 代码中指定
2.2.1 在application.properties文件中指定一个文件路径
eg:路径配置如下,当前项目config下的path.properties
xx.pathConfig.path = ./config/path.properties
2.2.2 编写加载类
这样启动时就会先加载出application.properties中
${xx.pathConfig.path}
的值,然后加载出这个定义的配置文件.只要修改application.properties中配置的自定义文件路径,就可以切换到不同的配置文件.
package xx.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
/**
* @Description: 请求详细地址的配置文件: xx-path.properties
* @Class: PathConfig
* @Author: Yiang37
* @Date: 2021/7/15 10:00
* @Version: 1.0
*/
// @PropertySource("classpath:/xx.properties")这种是classpath相对路径
// file指明实际路径.
@PropertySource(value = {"file:${xx.pathConfig.path}"}, encoding="utf-8")
@Configuration
public class PathConfig {
}
2.2.3 启动命令
java -jar xx.jar --spring.profiles.active=dev