将Spring Boot配置拆分为多个属性文件而无需指定环境变量/系统属性的任何方式

问题描述 投票:0回答:1

这里是Spring Boot的新手,但是Spring Framework的长期用户。

我正在寻找一种将外部化的配置拆分为多个.properties文件的方法,以提高可读性和可管理性。

我已经看到了this SO answer:可以在spring.config.name中指定配置文件名称列表(顺便说一下,在引导参考文档中似乎没有提到它,如果我错了,请更正我)可以完美解决我的问题,但是只能通过系统属性或环境变量来指定配置属性。如果我尝试在application.properties文件中指定它,它将被忽略。 spring.config.additional-location也会发生同样的情况。我知道发生这种情况是因为,当读取application.properties时,告诉Spring Boot搜索不同的外部化配置文件名称为时已晚。但是,这不是一个合适的解决方案,因为拆分配置的方式应该是应用程序的使用者不应该意识到的“实现细节”,因此我不希望使用者指定外部参数,否则应用程序开箱即用。

我认为应该提供一种方法。也许有一些.properties文件的导入机制,或者甚至可以在spring.config.name中指定application.properties的能力(可以接受一些已知且合理的限制)。

我能找到的最好的方法是使用@PropertySource,但这不是概要文件识别:除非您使用某些ugly nested class hack或您的put spring.profiles.active variable in the resource name(如果激活了多个概要文件,它将中断),您将不会无法获得spring.profiles.active个人资料专用文件的收益。

除了application.properties的一些声明,他们正在促进单个(可能是巨大的...)外部化配置文件的使用之外,我无法找到一种“官方方法”来执行此操作。从GitHub上的帖子反应来看,这个职位似乎并不那么受欢迎,恕我直言,它似乎确实是缺少的基本功能。多年来,我一直在Spring Framework(使用XML配置)中处理多个属性文件,但我从来没有觉得只有一个大文件会更好。

如果我理解的正确,在引导1.x中可以使用Spring Boot devslocation属性以某种方式实现,但是在引导2.x中却没有。

有任何建议吗?

spring spring-boot configuration properties-file
1个回答
0
投票

您是否尝试过使用Spring Profile?

您可以做的是创建@ConfigurationPropertiesapplication-file1.properties/yml并将其放在配置位置,然后添加application-file2.properties/yml。它将加载文件。

对于Pivotal Cloud Foundry,此配置文件条目可以在spring.profile.active=<your env profiles>,file1,file2中,也可以在bootstrap.yml中,在JVM args to application中。不确定在AWS和其他云提供商上。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.