3

我有一个应用程序需要我在启动期间设置系统属性,并且每个环境中的属性必须不同(即 Dev 中的一个值,Prod 中的不同值)。

这与另一个未回答的问题类似,但该问题专门询问守护程序,并且我们使用的是程序脚本。解决方案可能是相同的,尽管我确实发现了对 JSW 守护进程可能有特殊处理的提示。unix 模板有一个占位符@ENV_SETUP@文档说 environmentSetupFileName 仅适用于 JSW。我会考虑使用 environmentSetupFileName,但我找不到更多关于如何使用它或如何在 environmentSetupFileName 期望它们所在的 bin 目录中获取其他脚本的信息。

这似乎一定是一个常见问题,我很惊讶答案并不容易找到。如何使用 AppAssembler 设置特定于环境的系统属性?

4

2 回答 2

1

您可以将环境变量放在 extraJvmArguments 中,例如

<extraJvmArguments>-Dapp.contextPath=${APP_CONTEXT_PATH}</extraJvmArguments>

由于打包时无法解析 APP_CONTEXT_PATH,所以在 appassembler 生成的脚本中会保持这种形式。

然后只需在部署期间设置此环境变量。如果您使用 docker,这将非常方便。

于 2017-04-19T08:53:25.230 回答
0

首先,我必须说您认为环境设置文件仅适用于 JSW 的假设根本不正确。医生说:

$BASEDIR/bin 中的设置文件在执行前被调用。

注意:仅适用于 jsw 平台。如果此可选环境文件还设置了 WRAPPER_CONF_OVERRIDES 变量,它将被传递到 JSW 原生启动器的命令行参数中以覆盖 wrapper.conf 的属性。有关详细信息,请参阅 http://wrapper.tanukisoftware.com/doc/english/props-command-line.html

JSW 的概念仅与 Note 相关,这意味着您可以定义特殊变量来覆盖包装器配置文件。我认为这应该改进(为此创建了一张票)。

环境设置文件的定义只是说生成的脚本将调用给定的设置文件。如果您想将其他文件添加到 bin 文件中,那么轮到您了。

此外,如果您正确理解您的要求,您需要创建不同的包 Dev、Prod 等,其中值不同。这意味着您需要为 Dev 和 Prod 创建一个包。这意味着 appassembler-maven-plugin 等的多次执行,并且可能是 maven-assembly-plugin 以创建适当的结果存档。

于 2014-02-11T17:39:12.820 回答