如何在Spring Boot中设置外部配置的路径



我的问题是关于spring boot(v 2.2.x(中配置的另一个问题,但与SO上关于配置的现有帖子中的配置(即spring boot外部配置(相比,我的配置结构有一个显著差异我有以下应用程序配置:

--src
--main
--resources
-- application.yml
-- application-local.yml
-- application-dev.yml
-- application-prod.yml

我的application-prod.yml看起来像:

spring:
profiles: 
active: prod
include:
customization

logging:
level:
root: INFO
org.springframework: INFO
org.hibernate.SQL: INFO
org.hibernate.type: INFO
pattern:
console: '%d{yyyy-MM-dd HH:mm:ss} - %msg%n'
file: '%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n'
file: ./logs/goals-service.log

我的产品配置必须使用(这是业务需求(外部配置,并设置

  • db连接
  • 安全设置
  • 端点和其他服务的凭据

我想使用标准方法和spring自动配置bean的能力,我不想手动加载一些属性文件并手动配置所有bean。因此,为了解决这个问题,我创建了另一个配置应用程序-customization.yml,并通过include将其链接到prod-config中(参见上面的示例(。在这里,我遇到了一个问题:我无法通过命令行参数(-Dspring.config.location或任何it变体(选择application-customization.yml的路径,但当我将外部配置放在用于启动应用程序的目录中时,我可以加载自定义设置(这是spring搜索配置的行为(,应用程序在这种情况下运行良好。我想传递应用程序应该在哪里搜索我的应用程序的路径-customization.yml,还有一件事我不能使用符号链接从实际配置位置链接到/应用程序定制.yml.

删除该"包括";因为我不知道它将如何与我要说的任何内容交互。然后(至少(有两种简单的方法可以做你想做的事。(也有一些复杂的方法——针对你的情况,甚至大多数情况——比如覆盖这个或定义其中一个。(

方法1:将-Dspring.config.location=X传递给JVM,其中X是包含Spring应该读取的文件的位置的逗号分隔列表。在您的情况下,您可能想要-Dspring.config.location=file:/some/folder/,classpath:/;第一个位置将确保您满足业务需求,第二个位置将保证应用程序也在自己的jar中读取application-dev.yml。

方法2:将@PropertySource("file:/some/folder/application.properties")放在用@Configuration注释的类上(注意,@SpringBootApplication是用@Configuration元注释的(。这有两个问题:一是@PropertySource中的文件是最后读取的,其中的属性不覆盖之前读取的属性;第二,有一些属性是不能用@PropertySource文件设置的(因为在启动过程中读取文件太晚(。我不认为这两个问题会困扰你,但我想为其他读者注意一下。

关于Tomcat(可能还有其他容器(的注意:使用方法1有点复杂,因为spring.config.location是一个系统属性;这可能需要处理特定于应用程序的web.xml文件。编辑2020-09-04:或者你可以这样做(特别是代码中的第三个片段,我重复一遍,修改属性名称和值,以防答案消失:

public class ServletInitializer extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyApplication.class).properties("spring.config.location: /my/config1/,/my/config2/");
}
}

)。。。哪个更好。

这个答案主要是对关于这个问题和相关问题的优秀官方文件的反噬。

最新更新