如何覆盖 Spring @PropertySource 顺序?

Jax*_*xox 5 java spring config

问题是我的数据库配置文件具有“user”值,并且我正在使用 PropertySource 并尝试获取该值,但 SystemEnvironmentPropertySource 具有也具有“user”值的优先级。

那么如何指定 DBConfiguration 类使用database.config 的用户呢?

PS - 我无法更改配置名称,因为许多应用程序正在使用它。

@PropertySource("file:/config/database.config")
public class DBConfiguration {
  @Value("${user}")
  private String user;
  ..... 
}
Run Code Online (Sandbox Code Playgroud)

Art*_*kin 0

我的解决方法是明确使用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)
    }
}
Run Code Online (Sandbox Code Playgroud)