我正在使用自由服务器运行 java 批处理(jsr352)。server.xml 中配置的数据源。我想根据区域(如 dev、sit、prod)加载 server.xml。如何传递参数以启动自由服务器并动态加载数据源 server.env 文件和 bootstrap.properties 可能存在。因为新手..任何人都可以帮助解决这个问题。
问问题
968 次
2 回答
2
如果您有超出属性值的配置差异,则变量可能不够用。例如,假设您在 dev 中使用内存数据库(如 Derby 嵌入式)和在生产中使用更健壮的数据库(如 DB2)。
在您的主 server.xml 中,您可以使用如下变量包含另一个配置 xml 文件:
<server>
<include location="dbconfig-${env.ENV_LOCATION}.xml"/>
<!-- rest of common config here -->
</server>
然后你可以dbconfig-dev.xml
像这样拥有仅开发人员的配置:
<server>
<dataSource id="db" jndiName="jdbc/db">
<jdbcDriver libraryRef="DerbyLib"/>
<properties.derby.embedded databaseName="memory:testdb" createDatabase="create"/>
</dataSource>
<library id="DerbyLib">
<fileset dir="/path/to/derby.jar"/>
</library>
</server>
并且只用于生产的配置是dbconfig-prod.xml
这样的:
<server>
<dataSource id="db" jndiName="jdbc/db">
<jdbcDriver libraryRef="DB2JCCLib"/>
<properties.db2.jcc databaseName="PRODUCTION_DB"
serverName="serious.business.com"
portNumber="50000"/>
</dataSource>
<library id="DB2JCCLib">
<fileset dir="/path/to/db2.jar"/>
</library>
</server>
然后,根据为 设置的值ENV_LOCATION
,dbconfig-dev.xml
或者dbconfig-prod.xml
将包含在您的主 server.xml 配置中。
于 2018-11-16T22:07:05.630 回答
2
一种简单的方法是在 server.xml 中使用变量,如下所示:
<dataSource jndiName="jdbc/db2">
<jdbcDriver libraryRef="DB2JCCLib"/>
<properties.db2.jcc databaseName="${evn.db2_name}"
serverName="${env.db2_server}"
portNumber="${env.db2_port}"/>
</dataSource>
然后,您可以像这样在 server.env 中设置变量:
db2_name=mydb
db2_server=whatever.com
db2_port=50000
或者,如果您使用任何类型的脚本来启动 Liberty 服务器,您可以将它们导出到 bash 环境中,如下所示:
$ export db2_name=mydb
$ etc...
$ wlp/bin/server start myServer
于 2018-11-16T21:26:22.700 回答