JAVA 中的 JVM 属性
JVM property in JAVA
一个场景 - EAR 安装在 Websphere 应用程序服务器上,运行 安装在 30 多个 JVM 上。我只想在一个 JVM 上创建一个 属性,并想在我的 java 代码中读取它。
如何通过 WAS 控制台创建 JVM 级别 属性 并在 Java.
中读取它
创建自定义 属性
在 WAS (server1) 或 Deployment Manager 管理控制台中,导航到
服务器 > 服务器类型 > WebSphere 应用程序服务器自定义 属性
然后单击要在其上创建
的 JVM
服务器基础结构(部分)> Java 和流程管理 > 流程定义
其他属性(部分)> Java 虚拟机 > 自定义属性
单击“新建”按钮添加新的自定义 属性。
点击“应用”。
点击“保存”直接到主配置。
在独立或单节点环境中,您需要停止并重新启动服务器以使更改生效。
在集群环境中,您在部署管理器中定义了 属性,您可能需要执行“完全重新同步”并重新启动集群。
- 通过Java代码访问
在您定义 属性 的 WebSphere Application 服务器或节点中定义自定义 属性 后,您可以像访问 [=46] 中的系统 属性 一样访问它的值=],像这样:
String custProperty = System.getProperty("wbe.home");
您可以类似地在 JSP 页面中使用 scriptlet,如下所示:
<%
String custProperty = System.getProperty("wbe.home");
if ( custProperty .equalsIgnoreCase("home") ) {
%>
如果您想自动执行将自定义 属性 添加到 30 个 JVM 的手动任务
您可以使用 Jython 脚本。您可以根据自己的需要进行修改。
server = sys.argv[0]
property = sys.argv[1]
value = sys.argv[2]
if (len(sys.argv) == 4):
descr = sys.argv[3]
else :
descr = None
# Convert a list of items separated by linefeeds into an array
def getListArray(l):
return l.splitlines()
# Obtain the "simple" server name
def getServerName(s):
return AdminConfig.showAttribute(s, 'name')
# Add common attr list to specified Server's JVM
def addPropertiesToServer(s):
jvm = AdminConfig.list('JavaVirtualMachine', s)
# Look for existing property so we can replace it (by removing it first)
currentProps = getListArray(AdminConfig.list("Property", jvm))
for prop in currentProps:
if property == AdminConfig.showAttribute(prop, "name"):
print "Removing existing property from Server %s" % getServerName(s)
AdminConfig.remove(prop)
# Store new property in 'systemProperties' object
print "Adding property to Server %s" % getServerName(s)
AdminConfig.modify(jvm,[['systemProperties',attr]])
# Construct list with new property name and value
attr = []
if (descr is None):
print "Adding property %s=%s" % (property,value)
attr.append([['name',property],['value',value]])
else:
print "Adding property %s=%s,%s" % (property,value,descr)
attr.append([['name',property],['value',value],['description',descr]])
# Locate all Application Servers if server is 'all'
if (server == 'all'):
servers = AdminConfig.list('Server')
for aServer in getListArray(servers):
type = AdminConfig.showAttribute(aServer,'serverType')
if (type == 'APPLICATION_SERVER'):
addPropertiesToServer(aServer)
# TODO: support comma-separated list of servers
else:
# Locate specified Server and its JVM
server = AdminConfig.getid('/Server:'+server+'/')
addPropertiesToServer(server)
# Save changes
if (AdminConfig.hasChanges()):
AdminConfig.save()
您可以在集群级别创建 WebSphere 变量,您的服务器 运行 来自:
Environment --> WebSphere Variable --> <SelectYour_cluster_From_Dropdown> --> New
比如说,如果变量名称是 "MY.CUSTOM.PROPERTY" 那么您可以通过编写以下代码在 java 代码中访问它:
String myCustomProperty = (String) System.getenv("MY.CUSTOM.PROPERTY");
希望这对你有用。
一个场景 - EAR 安装在 Websphere 应用程序服务器上,运行 安装在 30 多个 JVM 上。我只想在一个 JVM 上创建一个 属性,并想在我的 java 代码中读取它。 如何通过 WAS 控制台创建 JVM 级别 属性 并在 Java.
中读取它创建自定义 属性
在 WAS (server1) 或 Deployment Manager 管理控制台中,导航到 服务器 > 服务器类型 > WebSphere 应用程序服务器自定义 属性 然后单击要在其上创建
的 JVM服务器基础结构(部分)> Java 和流程管理 > 流程定义
其他属性(部分)> Java 虚拟机 > 自定义属性
单击“新建”按钮添加新的自定义 属性。
点击“应用”。 点击“保存”直接到主配置。
在独立或单节点环境中,您需要停止并重新启动服务器以使更改生效。
在集群环境中,您在部署管理器中定义了 属性,您可能需要执行“完全重新同步”并重新启动集群。
- 通过Java代码访问
在您定义 属性 的 WebSphere Application 服务器或节点中定义自定义 属性 后,您可以像访问 [=46] 中的系统 属性 一样访问它的值=],像这样:
String custProperty = System.getProperty("wbe.home");
您可以类似地在 JSP 页面中使用 scriptlet,如下所示:
<%
String custProperty = System.getProperty("wbe.home");
if ( custProperty .equalsIgnoreCase("home") ) {
%>
如果您想自动执行将自定义 属性 添加到 30 个 JVM 的手动任务 您可以使用 Jython 脚本。您可以根据自己的需要进行修改。
server = sys.argv[0]
property = sys.argv[1]
value = sys.argv[2]
if (len(sys.argv) == 4):
descr = sys.argv[3]
else :
descr = None
# Convert a list of items separated by linefeeds into an array
def getListArray(l):
return l.splitlines()
# Obtain the "simple" server name
def getServerName(s):
return AdminConfig.showAttribute(s, 'name')
# Add common attr list to specified Server's JVM
def addPropertiesToServer(s):
jvm = AdminConfig.list('JavaVirtualMachine', s)
# Look for existing property so we can replace it (by removing it first)
currentProps = getListArray(AdminConfig.list("Property", jvm))
for prop in currentProps:
if property == AdminConfig.showAttribute(prop, "name"):
print "Removing existing property from Server %s" % getServerName(s)
AdminConfig.remove(prop)
# Store new property in 'systemProperties' object
print "Adding property to Server %s" % getServerName(s)
AdminConfig.modify(jvm,[['systemProperties',attr]])
# Construct list with new property name and value
attr = []
if (descr is None):
print "Adding property %s=%s" % (property,value)
attr.append([['name',property],['value',value]])
else:
print "Adding property %s=%s,%s" % (property,value,descr)
attr.append([['name',property],['value',value],['description',descr]])
# Locate all Application Servers if server is 'all'
if (server == 'all'):
servers = AdminConfig.list('Server')
for aServer in getListArray(servers):
type = AdminConfig.showAttribute(aServer,'serverType')
if (type == 'APPLICATION_SERVER'):
addPropertiesToServer(aServer)
# TODO: support comma-separated list of servers
else:
# Locate specified Server and its JVM
server = AdminConfig.getid('/Server:'+server+'/')
addPropertiesToServer(server)
# Save changes
if (AdminConfig.hasChanges()):
AdminConfig.save()
您可以在集群级别创建 WebSphere 变量,您的服务器 运行 来自:
Environment --> WebSphere Variable --> <SelectYour_cluster_From_Dropdown> --> New
比如说,如果变量名称是 "MY.CUSTOM.PROPERTY" 那么您可以通过编写以下代码在 java 代码中访问它:
String myCustomProperty = (String) System.getenv("MY.CUSTOM.PROPERTY");
希望这对你有用。