【问题标题】:Standalone properties file for Java Jar file? How to set up the configuration for different servers?Java Jar文件的独立属性文件?如何为不同的服务器设置配置?
【发布时间】:2015-11-10 14:51:07
【问题描述】:

所以我有一个可运行的 Java jar,其中包含将由 PHP 调用的 Java 库代码,目前我正在 PHP 中调用应用程序代码,如下所示:

$userIdinput = "abcd"; // 参数

exec("java -jar MyApplication.jar".$userIdinput,$output);

print_r($output);

这个 jar 文件需要在不同的环境 QA、Production 和我的本地 windows 机器上运行。 QA 和生产将在 Linux 机器上进行。这些环境中的每一个都有自己不同的属性变量。

我想知道最有效的方法是什么,当我将 MyApplication.jar 文件放在服务器位置时,它会从我放置在服务器某处的文件中读取属性变量?

我尝试了类路径,但无法让它工作。非常感谢您的帮助!!!!

【问题讨论】:

    标签: java php properties development-environment executable-jar


    【解决方案1】:

    最简单的解决方案是让您的 Java 程序在当前目录中查找属性文件,例如MyApplication.properties。只要调用者将当前目录设置为包含 Jar 文件的目录(您的 exec 示例将表明,因为 .jar 不合格),您的 Java 程序就可以找到它。

    在 Linux 上,MyApplication.properties 可能是指向真实文件的符号链接,可能存储在 /etc 中。

    此代码不依赖于操作系统,但允许每个安装指定其自己的本地配置值。

    【讨论】:

      【解决方案2】:

      首先,如果$userIdinput 确实来自某些用户输入,这可能不是很安全。他们可能会从您的命令中逃脱,在您的服务器上执行任意操作。

      至少,如果您必须使用 exec,请首先尽可能多地验证输入(如果它应该是整数,则将其强制转换或错误输出,如果不是) - 并使用escapeshellarg.

      有点不清楚你在问什么 - 但如果你试图从 PHP 中的服务器上的文件加载属性变量,那么有很多方法可以实现这一点。你可以创建一个带有相对路径的ini文件,例如:

      $properties = parse_ini_file("../local_properties.ini");
       exec("java -jar MyApplication.jar ".escapeshellarg ( $properties['userIdinput']),$output);
      

      那么 ini 文件只需要定义本地属性:

      ; Your local property:
      userIdinput = ABCD
      

      【讨论】:

        【解决方案3】:

        设置不同配置的最佳方法是使用配置文件。当您在示例中运行它时,我假设 jar 文件位于您的当前目录中。因此,很容易还有配置文件,只需从当前目录读取它,该目录也是 java 应用程序的工作目录。
        在您的代码中,您可以执行以下操作:File f = new File("configuration"),它将尝试在您当前的工作目录中找到一个文件,名称为配置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-03
          • 2013-09-17
          • 1970-01-01
          • 2018-09-21
          相关资源
          最近更新 更多