在不启动 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配置文件放在一个地方,让所有人都可以访问。按照步骤进行。
- 用某个名称创建一个项目,并在 src/main/resources 文件夹中保留 log4j 配置文件。
- 创建一个必须包含此 log4j 配置文件的 jar 文件。
- 在任何需要的地方使用这个创建的 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,但这里是最常见的摘要:
- 命令行参数,例如
java -jar MyApp.jar --foo=bar
- Java 系统属性,例如在 command-line
上使用 -Dfoo=bar
设置
- OS 环境变量,例如
SET foo=bar
(Windows) 或 export foo=bar
(Linux)
- 打包 jar 之外的应用程序属性,即相对于当前目录。
可以在 command-line 上覆盖名称和位置。
config/application.properties
config/application.yaml
application.properties
application.yaml
我想设置可跨其他 class 文件使用的 log4j 配置文件 path/other 文件夹路径,而不对文件夹路径进行硬编码。
现在,我已经将变量设置为环境变量。但它只能在我启动 Eclipse 时进行修改。我如何设置这个变量使得任何人(不想启动 Eclipse)都可以从外部修改它。此外,它将用于测试配置。所以最好不要对其进行硬编码,并让所有文件路径等易于重构。
final static String log4jpath = System.getenv("LOG4J_PATH");
Soni,如果你想把log4j配置文件放在一个地方,让所有人都可以访问。按照步骤进行。
- 用某个名称创建一个项目,并在 src/main/resources 文件夹中保留 log4j 配置文件。
- 创建一个必须包含此 log4j 配置文件的 jar 文件。
- 在任何需要的地方使用这个创建的 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,但这里是最常见的摘要:
- 命令行参数,例如
java -jar MyApp.jar --foo=bar
- 命令行参数,例如
- Java 系统属性,例如在 command-line 上使用
-Dfoo=bar
设置- OS 环境变量,例如
SET foo=bar
(Windows) 或export foo=bar
(Linux)
- OS 环境变量,例如
- 打包 jar 之外的应用程序属性,即相对于当前目录。
可以在 command-line 上覆盖名称和位置。config/application.properties
config/application.yaml
application.properties
application.yaml
- 打包 jar 之外的应用程序属性,即相对于当前目录。