我有一个需要更新的脚本。目前它需要所有数据源的密码,但现在我们有一些多数据源以及通用数据源。我的要求是,每当数据源是一个多数据源时,它应该跳过它并且不应该提示输入密码。我已经列出了下面的当前脚本。
def updateJDBCPasswords():
PARAMS_TEMPLATE = '/JDBCSystemResources/%s/JDBCResource/%s/JDBCDriverParams/%s'
domainConfig()
# Get JDBC DataSources
cd("JDBCSystemResources")
dataSources = cmo.getJDBCSystemResources()
edit()
# For each DataSource update the password
for dataSource in dataSources :
dsName = dataSource.getName()
password=raw_input("Enter database password for "+ dsName +" : ")
cd(PARAMS_TEMPLATE % (dsName, dsName, dsName) )
cmo.setPassword(password)
到目前为止,我已经看过我的帖子/博客,但这些都与我的问题无关。有帮助创建multidatasources但无法找到任何提示如何识别它以满足我的场景。
答案 0 :(得分:0)
不完全直观,但serverConfig树的根目录有一个部署列表,其中包括jdbc数据源等内容,这是我能找到一个允许您识别多数据源的mbean的唯一地方。因此,开头的附加代码会在代码中构建一个要忽略的名称列表。
serverConfig()
deployments=cmo.getDeployments()
multiDataSources = []
for deployment in deployments:
if (deployment.getType()=="JDBCMultiPool"):
multiDataSources.append(deployment.getName())
domainConfig()
# Get JDBC DataSources
cd("JDBCSystemResources")
dataSources = cmo.getJDBCSystemResources()
# For each DataSource update the password
for dataSource in dataSources :
dsName = dataSource.getName()
if dsName in multiDataSources:
print("Skipping multidatasource %s" % dsName)
continue
print("Processing data source %s" % dsName)
答案 1 :(得分:0)
以下内容可以提供帮助:
cd(_dsDir + '/JDBCDriverParams/NO_NAME_0/Properties/NO_NAME_0/Property/user')
_userprop = cmo.getValue()
# Multi datasource wouldn't have user properties and hence skipping the updation of multi datasources
if _userprop is None:
continue
else:
# continue updating password
cmo.setValue(_userval)
# Next set the password
cd(_dsDir + '/JDBCDriverParams/NO_NAME_0')
set('PasswordEncrypted', _dsPassword)