代码之家  ›  专栏  ›  技术社区  ›  walters

如何在用户定义的.properties文件中引用系统属性?

  •  8
  • walters  · 技术社区  · 15 年前

    我想为工作目录定义一个属性(比如 work.dir=/home/username/working-directory ,对于我的production.properties文件,不需要硬编码 /home/username .

    我想引用系统属性 user.home 在硬编码上就位 /主页/用户名 ,使 work.dir 更通用。

    如何引用系统属性并将其连接到用户定义的.properties中的其他用户定义字符串?

    注: 我不想在Java代码中访问用户名属性,而是从已定义的属性中访问。我希望能够替换 工作主管 对我的生产和开发都有不同的价值(例如junit测试)。

    3 回复  |  直到 13 年前
        1
  •  4
  •   Andy Thomas    15 年前

    从文件中获取属性,然后替换受支持的宏。

    String propertyValue = System.getProperty("work.dir");
    String userHome = System.getProperty("user.home" );
    String evaluatedPropertyValue = propertyValue.replace("$user.home", userHome );
    
        2
  •  3
  •   fglez    13 年前

    您可以使用 Commons Configuration 使用 Variable Interpolation

    如果您熟悉ant或maven,那么您肯定已经遇到了变量(比如 ${token} )在加载配置文件时自动展开的。Commons配置也支持此功能[…]

    允许.properties文件

    work.dir=${user.home}/working-directory
    
        3
  •  0
  •   Luigi    13 年前

    此功能在java.util.properties中不可用。但许多图书馆 变量替换 财产。

    下面是一个你想用的例子 OWNER API 库(见“导入属性”一段):

    public interface SystemPropertiesExample extends Config {
        @DefaultValue("Welcome: ${user.name}")
        String welcomeString();
    
        @DefaultValue("${TMPDIR}/tempFile.tmp")
        File tempFile();
    }
    
    SystemPropertiesExample conf =
            ConfigFactory.create(SystemPropertiesExample.class, System.getProperties(), System.getenv());
    String welcome = conf.welcomeString();
    File temp = conf.tempFile();