java - 在不启动 Eclipse 的情况下访问属性/环境变量?
问题描述
我想设置可跨其他类文件使用的 log4j 配置文件路径/其他文件夹路径,而不对文件夹路径进行硬编码。
现在,我已将变量设置为环境变量。但只有在我启动 Eclipse 时才能对其进行修改。我如何设置这个变量,使任何人(不想启动 Eclipse)都可以从外部修改它。此外,它将用于测试配置。因此,最好不要对其进行硬编码,并使所有文件路径等易于重构。
final static String log4jpath = System.getenv("LOG4J_PATH");
解决方案
转述评论:
[如何从 Java 程序之外获取价值,例如包含所有其他文件路径的单独文件?
这称为配置文件。
它通常是一个属性文件,类似于 Log4j 配置文件,但它可以是任何类型的文件,例如 XML、JSON、YAML...
要识别单个此类文件,您可以使用:
- 一个环境变量(就像你现在一样)
- 系统属性(更常见)
- 当前目录中特定命名的文件
- ...
该文件中的条目将识别您真正想要的所有值。
例如,Spring 是一个填充 Java 框架,它将在许多地方查找配置值。请参阅24. 外部化配置以获取完整详细信息,但这里是最常见配置的摘要:
- 命令行参数,例如
java -jar MyApp.jar --foo=bar
- 命令行参数,例如
- Java 系统属性,例如使用
-Dfoo=bar
命令行设置
- Java 系统属性,例如使用
- 操作系统环境变量,例如
SET foo=bar
(Windows) 或export foo=bar
(Linux)
- 操作系统环境变量,例如
- 打包 jar 之外的应用程序属性,即相对于当前目录。
名称和位置可以在命令行上覆盖。config/application.properties
config/application.yaml
application.properties
application.yaml
- 打包 jar 之外的应用程序属性,即相对于当前目录。
推荐阅读
- excel - 以分钟为单位计算两个时间之间的时间差
- c++ - 指针重新赋值,释放后堆使用
- php - Laravel 一对多关系 - “Illuminate\\Database\\Eloquent\\RelationNotFoundException”
- javascript - 将嵌套数组转换为对象
- c# - Google API TagManager v2 示例
- regex - 如何使用 perl 在不应用两次的情况下提取字符串之间的文本并向前看和向后看?
- html - 如何在引导程序中使列之间的垂直分隔线具有相同的高度?
- kotlin - Kotlin android if 语句
- java - 当为 jtable 中的列获得焦点时,CellEditorListener 调用 getCellEditorValue 方法
- python-3.x - 多对多字段布尔值的 Django 3 更新值