这里是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 devs的location
属性以某种方式实现,但是在引导2.x中却没有。
有任何建议吗?
您是否尝试过使用Spring Profile?
您可以做的是创建@ConfigurationProperties
,application-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和其他云提供商上。
希望这会有所帮助。