java - JAVA 中的 JVM 属性

标签 java web-applications websphere

一个场景 - 一个 EAR 安装在 Websphere 应用程序服务器上并运行在 30 多个 JVM 上。我只想在一个 JVM 上创建一个属性,并想在我的 Java 代码中读取它。 如何通过 WAS 控制台创建 JVM 级属性并在 Java 中读取它。

最佳答案

创建自定义属性

在 WAS(服务器 1)或部署管理器管理控制台中,导航到 服务器 > 服务器类型 > WebSphere 应用程序服务器自定义属性 然后单击要在其上创建的 JVM

服务器基础设施(部分)> Java 和进程管理> 进程定义

附加属性(部分)> Java 虚拟机 > 自定义属性

单击“新建”按钮添加新的自定义属性。

enter image description here

点击“应用”。 单击“保存”直接保存到主配置。

在独立或单节点环境中,您需要停止并重新启动服务器以使更改生效。

在集群环境中,您在部署管理器中定义了属性,您可能希望执行“完全重新同步”并重新启动集群。


  • 通过 Java 代码访问

在您定义属性的 WebSphere Application 服务器或节点中定义自定义属性后,您可以像访问 Java 中的系统属性一样访问它的值,如下所示:

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()

关于java - JAVA 中的 JVM 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32978643/

相关文章:

angularjs - 如何在 Angular 谷歌分析中为分析标签设置动态值?

java - 外部化资源适配器给出 : java. lang.ClassCastException someclass 与 someclass 不兼容

java - map getOrDefault返回对象时如何返回整数

java - Java Swing 中冲突的助记符

java - Struts2 + Sitemesh + Freemarker 不起作用

javascript - 如何覆盖 Google Chrome 的计算样式

java - Log4j2 - 文件中没有记录任何内容

Python ibm pyomo cplex

java - 同步计数器计数不正确

java - 为 Multi-Tenancy 设置 Hazelcast 缓存