如何在属性文件中构建值时使用Java参数

时间:2016-07-06 14:49:37

标签: java spring

有没有办法可以在应用程序.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);

4 个答案:

答案 0 :(得分:1)

如果你想拥有一个更简单的属性文件,你可以这样做:

const patched = Symbol('foo');
patched.key = 'foo';

这种方式更具可读性和可维护性。

答案 1 :(得分:0)

我建议您为每个环境使用不同的属性文件,因为它有如下自己的好处:

为每个环境设置单独的属性文件的好处?

  1. 每个环境清理属性文件。
  2. 职责分离(开发团队不需要知道生产文件的位置)
  3. 易于维护,即如果您希望拥有新的超级开发环境,则可以复制整个文件。
  4. 怎么做?

    将文件位置配置为环境中的环境变量。需要加载用于设置环境的属性以读取正确的文件夹位置。

    按照以下步骤操作:

    1. 配置环境变量:
    2. set app.properties.file = "your.file.location";
      
      1. 在java类中配置属性配置:
      2. PropertiesConfiguration propConfig = new PropertiesConfiguration(environment.getProperty("app.properties.file"));
                  final FileChangedReloadingStrategy reloadingStrategy = new FileChangedReloadingStrategy();
                  reloadingStrategy.setRefreshDelay(10000);
                  config.setReloadingStrategy(reloadingStrategy);
        
        1. 获取属性值:
        2. String value = propConfig.getProperty("your.property.name");
          

答案 2 :(得分:0)

您可以为每个环境使用单独的属性文件。原始属性将被特定于环境的属性覆盖。

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties

此外,-D参数会覆盖所有内容。因此,如果使用-D参数提供属性,则应在应用程序中使用属性值。

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html

答案 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>