是否可以在运行时指定上下文属性占位符

我有一个使用弹簧的独立jar子。 我的spring xml中的配置使用了在使用maven编译时我一直在替换的占位符。 弹簧配置示例:

   

${db.host}使用maven替换${db.host}而是想在运行时传入属性文件,例如

 java -jar Application.jar productionDB.properties 

这将允许我通过传入生产数据库属性文件或测试数据库属性文件在运行时切换数据库主机。

有可能做到这一点还是有更好的方法来实现同一目标?

您可以将属性文件指定为系统属性,例如:

 java -jar Application.jar -DappConfig=/path/to/productionDB.properties 

那么你应该能够在你的应用程序上下文中引用它:

     

您可以使用PropertyPlaceholderConfigurer使用.properties文件传递所需的变量。

    classpath:productionDB.properties    

您可以按原样保留bean声明。 这些属性将自动从productionDB.properties文件中获取。

有几个选择:

  1. 通过容器的JNDI设置资源,并使用Spring的
  2. 使用Spring的 。 我更喜欢这个“完整”bean定义的简写,因为Spring会自动使用正确的实现(Spring <3.1的PropertySourcesPlaceholderConfigurer ,或Spring 3.1+的PropertySourcesPlaceholderConfigurer )。 使用此配置,您只需将myProps.properties放在类路径的根目录(例如${TOMCAT_HOME}/lib )。

您可以使用context:property-placeholder传递值。 所以你的设置将是这样的:

  

然后,当您连接Foo服务时,可以使用配置中的属性名称,例如

    

然后,只需为每个环境使用不同的文件集

有关更多详细信息,请参阅spring文档。