问题是我的数据库配置文件具有“user”值,并且我正在使用PropertySource并尝试获取该值,但SystemEnvironmentPropertySource也具有“user”值的优先级。
那么如何指定DBConfiguration类使用database.config的用户呢?
P.S - 我无法更改配置名称,因为许多应用程序正在使用它。
@PropertySource("file:/config/database.config")
public class DBConfiguration {
@Value("${user}")
private String user;
.....
}
我的解决方法是使用
ApplicationContextInitializer
并明确定义顺序:
open class OverrideApplicationContextInitializer: ApplicationContextInitializer<ConfigurableApplicationContext> {
override fun initialize(applicationContext: ConfigurableApplicationContext) {
if (applicationContext.environment.activeProfiles.contains("prod")) {
try {
val properties = Properties()
properties.load(this.javaClass.getResourceAsStream("/my-prod.properties")) applicationContext.environment.propertySources.addLast(PropertiesPropertySource("my-prod", properties))
} catch (e: IOException) {
logger.error(e.message, e)
}
}
}
companion object {
private val logger = LoggerFactory.getLogger(OverrideApplicationContextInitializer::class.java)
}
}