Java Jar文件的独立属性文件?如何为不同的服务器设置配置



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

$userIdinput = "abcd";//参数

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

print_r(输出)美元;

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

我想知道什么是这样做的最有效的方法,当我把MyApplication.jar文件在服务器位置,它会读取属性变量从一个文件,我放在服务器上的某个地方?

我试过classpath,但不能让它工作。非常感谢您的帮助!!!!

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

首先,如果$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

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

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

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

最新更新