2

我正在使用自由服务器运行 java 批处理(jsr352)。server.xml 中配置的数据源。我想根据区域(如 dev、sit、prod)加载 server.xml。如何传递参数以启动自由服务器并动态加载数据源 server.env 文件和 bootstrap.properties 可能存在。因为新手..任何人都可以帮助解决这个问题。

4

2 回答 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_LOCATIONdbconfig-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 回答