在WebLogic启动时设置环境变量的最佳方法

11
在Oracle WebLogic中,设置环境变量最好的方式是什么,以便您的代码可以访问它?我们运行在WebLogic上的第三方应用程序正在寻找一个环境变量。
注意:我们使用Node Manager启动管理服务器。
我希望能够在域配置的某个地方进行设置,比如在Admin Console的Server Start选项卡中,但似乎没有合适的地方可以这样做。
我唯一看到的方法是:
1.编辑bin / setDomainEnv.sh以导出环境变量 2.修改nodemanager.properties使其具有StartScriptEnabled = true 这样可以强制NodeManager使用 / bin / startManagedWebLogic.sh,该脚本会源自setDomainEnv.sh,当NodeManager启动时,它们将被捕获。但是您还必须在每台机器上执行此操作。
想知道是否有比操纵Oracle的启动脚本更清洁的方法。

2
你有单个域名还是多个域名?如果你正在使用单个域名,那么将环境添加到setDomainEnv或让setDomainEnv源另一个脚本似乎是一个不错的选择。由于与属性不同,环境可能无法在运行时设置,因此没有简单的方法可以做到这一点。另一个选择是,如果相同的用户启动nodemanagers/servers...,你可以在他们的.bashrc中设置该用户的环境,这样当weblogic运行时它总是存在的。 - Display Name is missing
多个域,但在这种情况下,它特定于一个域。但即使如此,在一个域中通常有4台机器,因此需要在每台机器上进行修改,或者在某种共享存储上进行修改。我也喜欢用户环境的想法,但同样的警告仍然适用于每个服务器。我认为真正的解决方案是我们应该让代码/供应商读取系统属性或类路径上的文件。 :) - David Hergert
你曾经成功解决过这个问题吗? - Chrispie
嗨@Chrispie - 不幸的是,不行。我的建议,@jason-alexander基本上重申了一遍,似乎是最好的方法。如果您可以使用良好的配置管理工具(如puppet、ansible等)来管理您的机器,那么您很可能可以通过在操作系统用户上始终/可靠地设置ENV变量或修改setDomainEnv文件来设置必要的变量。不幸的是,它没有将配置与weblogic配置本身耦合,这就是我所追求的,但我找不到更好的方法。 - David Hergert
1个回答

15

如果您确定没有使用常见的框架,如Spring Framework,并且您的代码严格查找环境变量,那么您必须在启动Java进程之前,在任何常规配置文件之外设置环境变量。一旦Java进程启动,环境变量将对该进程为只读和最终

注意:如果您需要整个系统的环境变量,请使用/etc/profile、/etc/bash_profile、/etc/environment等。请记住,在这些全局位置设置变量需要从新登录重新启动节点管理器。您无需重新启动计算机,但通常只有在登录时才会源配置文件/环境文件。

对于仅在一个域或节点中的应用程序,环境变量应该在服务器的启动脚本中。编辑setDomainEnv.[sh|cmd]start(Managed)Weblogic.[sh|cmd]是设置WebLogic环境变量的最佳选择。

然而,如果应用程序使用Spring,则系统属性和环境变量会合并在一起。系统属性被高度鼓励并且更容易维护和控制。

参考:What is best practice for setting java system properties, -D or System.setProperty()?

Weblogic域环境变量

设置系统属性或环境变量的地方之一是编辑用于启动共享同一WebLogic服务器安装和域的所有节点或服务器的域环境脚本。在< weblogic_domain >/bin/setDomainEnv.sh(在Windows上为setDomainEnv.cmd)中,对于环境变量,只需将它们添加到顶部并添加注释以记录其使用。

    export CUSTOM_VAR="test" # UNIX comment to describe environment variable.

对于系统属性,您可以通过向文件顶部、WL_HOME定义附近但在函数和注释之后添加EXTRA_JAVA_PROPERTIES行来添加将添加到每个服务器的命令行参数。

    EXTRA_JAVA_PROPERTIES="-Denv=TEST"
    export EXTRA_JAVA_PROPERTIES

    WL_HOME="/appl/oracle/middleware/wls/12.1.2.0.0/wlserver"
    export WL_HOME

Weblogic节点特定的环境变量

如果您需要为由同一节点管理器启动的每个节点提供不同的环境变量,则必须对启动脚本进行进一步的定制。在这种情况下,请编辑< weblogic_domain >/bin/startManagedWeblogic.[sh|cmd]文件,并在_export SERVER_NAME_之后插入一些脚本逻辑。通过这种方式,您可以根据SERVER_NAME等驱动您的设置。

提示:Windows环境变量对System.getenv(..)不区分大小写。


Jason - 感谢你的详细说明!我熟悉这三个选项,但问题在于供应商代码查找环境变量,即System.getenv().get("FOO_HOME")...而不是系统属性。 - David Hergert
路径或者LD库路径怎么样? - Kalpesh Soni
当然,那些也可以使用,但是我正在尝试配置环境变量到平台(weblogic)的设置/管理。这样,例如,如果我将托管服务器移动到一个(全新的)机器上,我就不必记住设置该变量。它将被封装到域配置中,并与托管服务器配置本身相关联。越来越多地听起来这是不可能的了。我承认,Env Variables 不是注入配置的最佳方式,但不幸的是我受制于供应商的代码。 - David Hergert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接