动态自由配置开发和生产数据源以根据环境加载

configuring dev and prod datasource in liberty dynamically to load based on the environment

我 运行 java batch(jsr352) 使用 liberty 服务器。 server.xml 中配置的数据源。我想根据区域(如开发、坐、生产)加载 server.xml。如何传递参数以启动自由服务器并动态加载数据源 server.env 文件和 bootstrap.properties 可能存在。因为是新手..任何人都可以帮忙吗

一个简单的方法是在 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

如果您的配置差异超出了属性值,变量可能不够。例如,假设您在开发环境中使用内存数据库(如嵌入式 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.xmldbconfig-prod.xml 将包含在您的主要 server.xml 配置中。