在不启动 Eclipse 的情况下访问 property/environment 个变量?

Access property/environment variables without launching Eclipse?

我想设置可跨其他 class 文件使用的 log4j 配置文件 path/other 文件夹路径,而不对文件夹路径进行硬编码。

现在,我已经将变量设置为环境变量。但它只能在我启动 Eclipse 时进行修改。我如何设置这个变量使得任何人(不想启动 Eclipse)都可以从外部修改它。此外,它将用于测试配置。所以最好不要对其进行硬编码,并让所有文件路径等易于重构。

final static String log4jpath = System.getenv("LOG4J_PATH");

Soni,如果你想把log4j配置文件放在一个地方,让所有人都可以访问。按照步骤进行。

  1. 用某个名称创建一个项目,并在 src/main/resources 文件夹中保留 log4j 配置文件。
  2. 创建一个必须包含此 log4j 配置文件的 jar 文件。
  3. 在任何需要的地方使用这个创建的 jar 文件。 Log4j 将自动使用所需日志记录的配置。如果需要,您可以将此 jar 文件分发给任何想要使用它的人。

以上选项是如果你不想更改配置文件。

现在如果出现有人要修改配置文件的情况。 在这种情况下,只需将配置放在任何项目类路径中,意味着在资源文件夹中。只要类路径和配置文件中有 log4j jar 文件。它将记录所有内容。

但是,如果需要,您可以通过将配置作为对象传递来扩展 Log4j 的功能。您可以参考下面的 link 以编程方式访问。

https://howtodoinjava.com/log4j/how-to-programmatically-configure-appenders-in-log4j/

我已将所有文件和文件夹路径添加到属性文件中(示例 config.properties),然后通过 InputStream input = new FileInputStream("Path to//config.properties"); Properties prop = new Properties(); prop.load(input); System.setProperty("log4j2.configurationFile", prop.getProperty("log4j.path"));

在测试设置方法中使用它

这样,所有 files/folder 路径都可以从外部修改,不需要从项目内部设置环境变量。

转述

[How to get value from] outside of the Java program such as a separate file, that contains all other filepaths?

那叫做配置文件

它通常是一个属性文件,类似于 Log4j 配置文件,但它可以是任何类型的文件,例如XML、JSON、YAML、...

要识别单个此类文件,您可以使用:

  • 一个环境变量(就像你现在一样)
  • 一个系统属性(比较常见)
  • 当前目录中的一个特别命名的文件
  • ...

该文件中的条目将标识您真正需要的所有值。

例如Spring,这是一个populateJava框架,会在很多地方寻找配置values。有关详细信息,请参阅 24. Externalized Configuration,但这里是最常见的摘要:

    1. 命令行参数,例如java -jar MyApp.jar --foo=bar
    1. Java 系统属性,例如在 command-line
    2. 上使用 -Dfoo=bar 设置
    1. OS 环境变量,例如SET foo=bar (Windows) 或 export foo=bar (Linux)
    1. 打包 jar 之外的应用程序属性,即相对于当前目录。
      可以在 command-line 上覆盖名称和位置。
      • config/application.properties
      • config/application.yaml
      • application.properties
      • application.yaml