2015-10-06 50 views
3

方案 - EAR安裝在Websphere應用程序服務器上,並在超過30個JVM上運行。我只想在一個JVM上創建一個屬性,並且想在我的java代碼中讀取它。 如何通過WAS控制檯創建JVM級別屬性並使用Java讀取它。JAVA中的JVM屬性

+0

對於30個實例,我建議您檢查[Apache Zookeeper](http://zookeeper.apache.org/)。 –

+1

您可以使用JNDI替代..通過在羣集級別創建它將可用於30多個JVM ... – Nayeem

回答

2

創建自定義屬性格式

在WAS(服務器)或部署管理器管理控制檯,導航到 服務器> ServerTypes>的WebSphere應用服務器對自定義屬性 並點擊JVM要在其中創建

服務器基礎結構(部分)> Java和進程管理>進程定義

附加屬性(部分)> Java虛擬機>對自定義屬性

單擊「新建」按鈕添加新的自定義屬性。

enter image description here

點擊「應用」。 直接點擊'保存'到主配置。

在獨立或單節點環境中,您需要停止並重新啓動服務器才能使更改生效。

在您定義部署管理器中的屬性的集羣環境中,您可能需要執行「完全重新同步」並重新啓動集羣。


  • 通過Java代碼

訪問在WebSphere Application Server或您定義的屬性節點中定義自定義屬性後,您可以像你將一個系統訪問其值屬性如下:

String custProperty = System.getProperty("wbe.home"); 

您可以同樣使用在JSP頁面的小腳本是這樣的:

<% 
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() 
+0

如果您必須將此應用於ND中的30臺服務器,則應該對其進行編寫腳本。 – Alasdair

0

您可以創建在羣集級別在WebSphere變量上您的服務器從運行:

Environment --> WebSphere Variable --> <SelectYour_cluster_From_Dropdown> --> New 

說,如果變量名是「MY.CUSTOM.PROPERTY」那麼你就可以通過編寫以下代碼在您的java代碼中訪問它:

String myCustomProperty = (String) System.getenv("MY.CUSTOM.PROPERTY"); 

希望這適用於您。