根据评论进行编辑:
方法1:
-
打开setDomainEnv.cmd并搜索
export SERVER_NAME
在Linux中或
set SERVER_NAME
在Windows中。跳到下一行(即跳过当前行和下一行)
-
在当前行中,插入:
customServerList="server1,server2" #this serverList should be taken as input
isCurrServerCustom=$(echo ${customServerList} | tr ',' '\n' | grep ${SERVER_NAME} | wc -l)
if [ $isCurrServerCustom -gt 0 ]; then
# add customJavaArg
JAVA_OPTIONS="-Dmy.property=${USERPROFILE}/someDir/someJar.jar"
fi
-
保存setDomainEnv.sh文件并重新启动服务器
请注意,我只给出了Linux的逻辑,对于Windows,可以使用类似的逻辑,但使用批脚本语法。
方法2:
假设域已经安装,并且用户提供JVM参数指向的服务器列表
-Dmy.property
需要添加。Jython脚本(使用wlst.sh执行)。
WLST Reference
。
用法:
wlst.sh script_name props_file_location
import os
from java.io import File
from java.io import FileInputStream
# extract properties from properties file.
print 'Loading input properties...'
propsFile = sys.argv[1]
propInputStream = FileInputStream(propsFile)
configProps = Properties()
configProps.load(propInputStream)
domainDir = configProps.get("domainDir")
# serverList in properties file should be comma seperated
serverList = configProps.get("serverList")
# The current machine's logical name as mentioned while creating the domain has to be given. Basically the machine name on which NM for current host is configured on.
# This param may not be required as an input if the machine name is configured as same as the hostname , in which case , socket module can be imported and socket.getHostName can be used.
currMachineName = configProps.get("machineName")
jarDir = os.environ("USERPROFILE")
argToAdd = '-Dmy.property=' + jarDir + File.separator + 'someDir' + File.separator + 'someJar.jar'
readDomain(domainDir)
for srvr in serverList.split(",") :
cd('/Server/' + srvr)
listenAddr = get('ListenAddress')
if listenAddr != currMachineName :
# Only change current host's servers
continue
cd('/Server/' + srvr + '/ServerStart/' + srvr)
argsOld = get('Arguments')
if argsOld is not None :
set('Arguments', argsOld + ' ' + argToAdd)
else:
set('Arguments', argToAdd)
updateDomain()
closeDomain()
# now restart all affected servers (i.e serverList)
# one way is to connect to adminserver and shutdown them and then start again
脚本必须从要部署托管服务器的所有主机上运行,以便在JVM参数中具有特定于主机的值“USERPROFILE”。
顺便说一句,在一行中回答您的问题:看起来JVM参数最终必须与文本一起提供。但是,如果作为JVM参数提供,那么看起来WLS不会转换环境变量。它给人的印象是,当它从startWebLogic.cmd(例如:使用%DOMAIN_HOME%等)完成时,它正在进行翻译,但它的shell/cmd执行器会进行翻译,然后启动JVM。