Spring Boot – spring.config.name –案例研究

当必须在不同配置中使用相同的应用程序代码时,外部化Spring Boot应用程序属性会很有用。 如果spring.config.location配置远离源代码(无论如何spring.config.location被认为是最佳实践), spring.config.location环境属性可以用于指向带有属性文件的目录位置。 另一方面, spring.config.name可用于更改默认为application的属性文件的基本名称。 该文档显示为: 如果您不喜欢 application.properties作为配置文件名,则可以切换到另一个 。 但是在什么情况下可以使用spring.config.name

(潜在)问题

提供spring.config.location的方法之一是使用环境变量: SPRING_CONFIG_LOCATION 。 将Spring Boot应用程序部署到Tomcat服务器时,这可以被认为是有用的。 当Spring Boot应用程序启动时,它将从SPRING_CONFIG_LOCATION目录中选择application.properties (具有特定于配置文件的属性文件)。

但是,当将多个Spring Boot应用程序部署到同一Tomcat服务器时会发生什么呢?

在这种情况下,我们可能会期望某些意外的行为,因为其他应用程序也会从SPRING_CONFIG_LOCATION目录中选择该application.propertiesSPRING_CONFIG_LOCATION ;如果这些应用程序不同,我们可能会遇到麻烦。

(潜在)解决方案

解决此问题的方法之一是在每个应用程序中更改配置基本名称。

可以使用spring.config.name属性在servlet初始化程序中以编程方式完成此操作:

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application
            .properties("spring.config.name:my-app-1")
            .sources(MyApiApplication.class);
    }

}

启动应用程序时,Spring Boot会期望存在my-app-1.properties (具有特定于配置文件的变体,例如my-app-1-test.properties )。 这样,我们可以使用外部化配置轻松地将多个应用程序部署到同一Tomcat服务器:

/data/config/my-app-1.properties
/data/config/my-app-1-test.properties
/data/config/my-app-2.properties
/data/config/my-app-2-test.properties

最后的想法

硬编码配置不是最佳解决方案,但是在某些情况下,没有比这更好的方法了。

翻译自: https://www.javacodegeeks.com/2017/10/spring-boot-spring-config-name-case-study.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值