【问题标题】:Best way to set environmental variables in WebLogic startup在 WebLogic 启动中设置环境变量的最佳方法
【发布时间】:2014-05-12 22:47:30
【问题描述】:

在 Oracle WebLogic 中,设置环境变量以便您的代码可以访问它的最佳方法是什么?我们有运行 WebLogic 的第三方应用程序来寻找环境变量。

注意:我们使用节点管理器启动托管服务器。

我希望能够在域配置中的某个位置设置它,例如在管理控制台的“服务器启动”选项卡中,但似乎没有好地方这样做。

我能想到的唯一方法是

  1. 编辑bin/setDomainEnv.sh 以导出环境变量
  2. nodemanager.properties修改为StartScriptEnabled=true

它的作用是强制 NodeManager 使用 <ms_home>/bin/startManagedWebLogic.sh,它是 setDomainEnv.sh 的来源,并且它们将在 NodeManager 启动时被拾取。但您也必须在每台机器上执行此操作。

想知道是否有比使用 Oracle 的启动脚本更简洁的方法。

【问题讨论】:

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

标签: java weblogic environment-variables startup


【解决方案1】:

如果您确定没有任何常用框架(如 Spring 框架)在使用,并且您的代码严格查找环境变量,那么您必须 在期望它的 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 服务器安装和域的所有节点或服务器。 /bin/setDomainEnv.sh里面,(windows上setDomainEnv.cmd),对于环境变量,只要在靠近顶部的地方加上,加上cmets来记录它们的使用.

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

对于系统属性,您可以通过在文件顶部附近、WL_HOME 定义附近但在函数和 cmets 之后为 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 节点特定的环境变量

如果您需要为由同一个节点管理器启动的每个节点设置不同的环境变量,您将不得不更多地自定义启动脚本。在这种情况下,编辑 /bin/startManagedWeblogic.[sh|cmd] 并在 _export SERVER_NAME_ 之后插入一些脚本逻辑。这样,您可以根据 SERVER_NAME 等驱动您的设置。

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

【讨论】:

  • Jason - 感谢您的详尽撰写!我对所有三个选项都很熟悉,但这里的问题是供应商代码会查找 environmental 变量,如 System.getenv().get("FOO_HOME")... 而不是 System Properties。
  • 路径或ld库路径怎么样
  • 当然,这些也可以,但我再次尝试将环境变量的设置/管理配置到平台(weblogic)。因此,例如,我将托管服务器移动到(全新)机器上,我不必记住设置该变量。它将被封装到域配置中,以某种方式与托管服务器配置本身相关联。不幸的是,它听起来越来越像这样是不可能的。我承认,Env 变量不是注入配置的最佳方式,但不幸的是,我受制于供应商的代码。
猜你喜欢
  • 2015-03-23
  • 2014-02-15
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2021-12-10
  • 2010-10-24
相关资源
最近更新 更多