有没有办法可以在应用程序.properties文件中使用Java -D参数,这样当我加载我的属性时,在特定的键值上,部分值被替换为-D参数。
我有一个像这样的app.properties文件
example.file=file:/Users/XXXX/assets/tables/overage/test1.xls
example.template.file=file:/Users/XXXX/assets/tables/overage/test2.xls
example.mapping.file=file:/Users/XXXX/assets/tables/overage/test3.properties
我想提取"文件:/ Users / XXXX / assets / tables /"到-D参数,使我的属性文件独立于服务器环境。
示例:
Jvm arg:
-Dfilepath ="文件:/用户/ XXXX /资产/表/"
我试过这样的事情
example.file = {}文件路径超龄/ TEST1.XLS
所以当我调用下面的代码并使用某种机制时,它应该用环境变量替换文件路径。
Properties prop = new Properties();
FileInputStream fis = new FileInputStream(new File(app.properties))
prop.load(fis);
答案 0 :(得分:1)
如果你想拥有一个更简单的属性文件,你可以这样做:
const patched = Symbol('foo');
patched.key = 'foo';
这种方式更具可读性和可维护性。
答案 1 :(得分:0)
我建议您为每个环境使用不同的属性文件,因为它有如下自己的好处:
将文件位置配置为环境中的环境变量。需要加载用于设置环境的属性以读取正确的文件夹位置。
按照以下步骤操作:
set app.properties.file = "your.file.location";
PropertiesConfiguration propConfig = new PropertiesConfiguration(environment.getProperty("app.properties.file")); final FileChangedReloadingStrategy reloadingStrategy = new FileChangedReloadingStrategy(); reloadingStrategy.setRefreshDelay(10000); config.setReloadingStrategy(reloadingStrategy);
String value = propConfig.getProperty("your.property.name");
答案 2 :(得分:0)
您可以为每个环境使用单独的属性文件。原始属性将被特定于环境的属性覆盖。
此外,-D参数会覆盖所有内容。因此,如果使用-D参数提供属性,则应在应用程序中使用属性值。
答案 3 :(得分:0)
我相信你正在寻找一些在这里描述得很好的东西:http://www.summa.com/blog/2009/04/20/6-tips-for-managing-property-files-with-spring
如果希望系统变量覆盖属性文件中定义的值,则应使用:
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
即
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="locations">
<list>
<value>classpath:application.properties</value>
</list>
</property>
</bean>