java - 避免对属性文件路径规范进行硬编码

标签 java unix

我在将 JAVA 程序使用的属性文件的路径规范与实现本身解耦时遇到了一个小问题。 该程序可能部署在具有不同目录结构的多个位置,并且我不希望将路径规范硬编码到程序代码中。

这是现在的情况。

我有一个文件夹服务器/ 里面有2个包 core/& support/(这两个包下面都有很多子包)

我之前所做的是,只要需要指定属性文件的路径,我就给出一个相对路径,即properties/ 在这种情况下,属性文件需要位于您启动程序的任何位置。这在测试期间有效,当我使用手动启动程序时 “java”。我会将属性文件夹放在启动程序的任何位置。 但在实际场景中,该程序将由脚本(ksh)自动启动,该脚本由作业按计划的时间间隔执行。

在这种情况下,给出相对路径不起作用。我尝试将属性文件放在脚本所在的文件夹中,但这也不起作用。

现在,我必须手动指定每个环境的路径,重新编译代码并为每个环境部署单独的副本。 有没有一种方法可以消除这种耦合,并且只为属性文件提供一个位置,而不管它需要部署在哪里?

最佳答案

使用 System.Properties 条目指定路径,然后在命令行上通过

添加它
java -DmyProp=somepath -cp yourclasspath YourClass

在您的应用中,您可以使用 System.getProperty("myProp") 检索它,只需确保添加适当的测试并处理“未找到属性”场景即可。

另一种做法是将 props 放在 jar 中,然后使用 LoadResource 加载它们,这样你只需要在每次部署中部署不同的配置 jar,但我认为 System.setProperty 方式是最快的。

关于java - 避免对属性文件路径规范进行硬编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750433/

相关文章:

java - 如何以编程方式查看 android 中 zip 中的内容(无需解压缩)

mysql - 表的 key 文件不正确,尝试修复它?

linux - SystemOut.log 文件字符串搜索、计数并在计数达到 10 时通过电子邮件发出警报

javascript - 如何将看起来像英文的 Unicode 文本转换为 ASCII?

c中基于控制台的聊天应用程序

Java - Web 应用程序中的线程同步

java - wordCount频率返回java中的重复集

java - 我是否需要继续命令。为什么?

java - RealmList 序列化问题(Realm/Gson/Intent)

mysql - MySQL文件名太长错误