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

启动时,会自动根据填写的参数值,读取对应的配置文件进行加载.

image-20210816172329892

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
posted @ 2021-08-16 17:29  羊37  阅读(1093)  评论(0编辑  收藏  举报