spring-boot 支持从外部加载配置文件。
加载单个文件
使用 spring.config.location
属性来配置外部配置文件的路径,可以是指定的文件或者文件夹(如果是文件夹需要在后面加"/",详见 spring-boot 文档),路径可以是绝对路径也可以是相对路径也可以使用 classpath 来提供路径前缀。具体使用如下:
java -jar -Dspring.config.location=/opt/conf/ target/SpringBootApp.jar
java -jar -Dspring.config.location=./conf/extconf.properties target/SpringBootApp.jar
java -jar -Dspring.config.location=classpath:/custom/extconf.properties target/SpringBootAppjar
加载多个文件
java -jar -Dspring.config.location=classpath:/custom1/,classpath:/customs2/ target/SpringBootApp.jar
从环境变量读取多个文件
set SPRING_CONFIG_LOCATION=~/custom1/,/user/custom2/
java -jar target/SpringBootApp.jar
编程的方式读取
假设有两个配置文件
~/custom1/extconf.properties
~/custom2/myconf.properties
@SpringBootApplication
public class SpringBootExternalConfiguration {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(SpringBootExternalConfiguration.class) .properties("spring.config.name:extconf,myconf","spring.config.location:classpath:~/custom1/,/user/custom2/").build().run(args);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
System.out.println(environment.getProperty("welcome.message"));
}
}
spring.config.name
可以用来指定配置文件的名字,比如默认是 application.yml,可以通过spring.config.name=extconf
来指定配置文件的名字(后缀前面的名字)为 extconf,如上面代码所示
注意
springboot 应用程序需要传入参数 args 来启动才能接收到命令行配置的相关参数 SpringApplication.run(SpringBootApplicationRun.class, args);
参考 :https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config