可以设置指向包含 application.properties 文件的文件夹的环境变量。spring_config_location
对于Tomcat,您可以通过将以下行添加到文件中来执行此操作(如果缺少,请创建文件):<TOMCAT_HOME>/bin/setenv.sh
export spring_config_location=/usr/local/tomcat/conf/
将属性文件放在该文件夹中。如果您有多个应用程序,则可以将每个应用程序的属性文件的名称设置为唯一。对于Spring Boot应用程序,我是这样做的:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
System.setProperty("spring.config.name", "my-app");
SpringApplication.run(MyApplication.class, args);
}
}
这将在使用 BOOT 运行时选择新名称。要在部署在 Tomcat 上时也配置名称,请覆盖如下配置:SpringBootServletInitializer
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyApplication.class).properties("spring.config.name: my-app");
}
}
然后将属性文件命名为:.而不是默认名称Spring将寻找它。在我们的示例中,你可以将所有应用属性文件放在指定的文件夹中。您的外部属性将获得优先权。有关优先级,请参阅此处:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.htmlmy-app.properties
/usr/local/tomcat/conf/
更新
自 Spring Boot 2 以来,的行为已更改(来自迁移指南):spring_config_location
它以前将一个位置添加到默认位置列表中,现在它替换了默认位置。如果您依赖于之前的处理方式,则现在应该改用spring.config.additional-location。
因此,根据您的用例,您应该考虑将哪些属性设置为环境变量。新的应该看起来像在 中。从何处查找文件也在参考文档中进行了描述。spring_config_additional-location
setenv.sh