我遇到了一个小问题,即将JAVA程序使用的属性文件的路径规范与实现本身分离。 该程序可以部署在具有不同目录结构的多个位置,我不希望将路径规范硬编码到程序代码中。
现在存在这种情况。
我有一个文件夹服务器/ 里面有2个包核心/&支持/(两者都有很多子包)
我之前做的是,无论何时需要指定属性文件的路径,我只给出了一个相对路径,即属性/ 在这种情况下,属性文件需要在您启动程序的任何位置。这在测试期间起作用,当我手动启动程序时使用 “java”。我会把属性文件夹放在我从哪里开始程序。 但在实际情况中,该程序将由脚本(ksh)自动启动,该脚本由作业按计划的时间间隔执行。
在这种情况下,给出相对路径不起作用。我尝试将属性文件放在脚本所在的文件夹中,但这也不起作用。
现在,我必须手动指定每个环境的路径,重新编译代码并为每个环境部署单独的副本。 有没有办法删除这个耦合,只需要一个属性文件的位置,无论它需要在哪里部署?
答案 0 :(得分:3)
使用System.Properties条目指定路径,然后在命令行中通过
添加它java -DmyProp=somepath -cp yourclasspath YourClass
在您的应用中,您可以使用System.getProperty("myProp")
检索它,只需确保添加正确的测试并处理未找到属性的情况。
另一种做法是在一个jar中放置props,然后使用LoadResource加载它们,这样你只需要在每个部署中部署不同的配置jar,但我认为System.setProperty方式是最快的。 / p>
答案 1 :(得分:0)
通常,某些客户可能不喜欢在启动应用程序时使用-D =。实际上,您还应该提供.sh / .bat脚本文件以及您的jar文件,以便客户端只需双击脚本即可运行您的应用程序。
在此脚本中,您可以声明变量,您可以要求客户端进行相应的配置。客户端只需在文本编辑器中打开脚本文件,然后输入配置文件的路径即可。
使用此脚本文件的其他方法是执行以下操作: 1)检查系统环境中是否设置了YOUR_APP_NAME_CONFIG变量。如果是,则转到步骤3或转到步骤2 2)在命令行上询问用户配置文件的位置。检查位置是否正确。如果正确,则将环境变量YOUR_APP_NAME_CONFIG设置为配置文件的位置值。 3)启动您的申请
为您的应用程序提供脚本文件可以让您自由地为应用程序自动化环境配置做很多事情。 在您的应用程序中,通过System.getProperty(“YOUR_APP_NAME_CONFIG”)获取配置文件路径。
这可能看起来很多痛苦,但从客户的角度思考。它为客户提供了蛋糕,他只需双击一个脚本即可启动您的应用程序,并且首次启动应用程序时脚本会根据需要请求输入,然后您的应用程序就可以了:)
答案 2 :(得分:0)
我所做的是使用jar调用传递另一个classpath参数..
java -cp classpath1;folder-where-propertiesfile-located Application.jar
并在应用程序中使用getClass().getClassLoader().getResourcesAsStream("properties-file");
这将自动从适当的classpath文件夹中获取属性文件..
使用此设置,我可以更改文件夹中的属性文件并使用相同的jar文件而无需重新存档jar ..