我很好奇什么是依赖项的环境(甚至服务器)特定属性的最佳实践。
这不适用于由applicationContext管理的属性,因为我知道Spring支持的{env} -application.properties约定。
我将举一个小例子来详细说明:
我的项目是项目A.在A中,我们依赖项目B
A的pom.xml
<dependency>
<groupId>com.B</groupId>
<artifactId>B</artifactId>
</dependency>
工件B依赖于B.properties,它没有提供,它必须在类路径上。我无法重构神器B。
B.properties的内容是:
b.someproperty=${property.placeholder}/b/dir
application.properties的内容:
property.placeholder=default
dev-application.properties的内容:
property.placeholder=dev
因此,当我使用-Dspring.profiles.active = dev运行我的spring启动应用程序时,b.someproperty必须解析为dev / b / dir
到目前为止我尝试过的(有效):
1)位于服务器上的外部化属性,占位符已经解析,只是在运行时将它们添加到类路径中(因此每个服务器都有自己的B.properties文件,没有占位符,这不属于构建/部署过程)
2)spring可引导jar中的类获取b.properties中的属性,解析所有占位符,并将其写入服务器上的文件,然后将此文件添加到类路径中。因此,使用-Dspring.profiles.active = dev运行应用程序将在没有占位符的服务器上生成b.properties,并且所有内容都包含在jar中。
这些解决方案都不是很干净,也不是很好(imo)。是否可以在使用属性时解析占位符,即使它们不是由应用程序上下文管理的呢?
对我当前解决方案的任何见解或批评都表示赞赏。