自由配置dev和prod数据源以根据环境进行动态加载

时间:2018-11-16 21:04:00

标签: java websphere-liberty jsr352 open-liberty

我正在使用自由服务器运行Java批处理(jsr352)。在server.xml中配置的数据源。我想基于该区域加载server.xml(例如dev,sit,prod)。如何传递参数以启动自由服务器并动态加载数据源 server.env文件和bootstrap.properties可能存在。既然是新手,那么任何人都可以帮忙。

2 个答案:

答案 0 :(得分: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 env中,如下所示:

$ export db2_name=mydb
$ etc...
$ wlp/bin/server start myServer

答案 1 :(得分:2)

如果配置差异超出属性值,则变量可能不足。例如,假设您在dev中使用内存数据库(如嵌入式Derby),而在生产中使用功能更强大的数据库(如DB2)。

在主server.xml中,您可以使用类似这样的变量来包含另一个配置xml文件:

mutate_at

然后您可以在library(dplyr) set.seed(10) df <- data.frame(a = sample(c(NA, 1:3) , replace = TRUE, 10), b = sample(c(NA, 101:103), replace = TRUE, 10), c = sample(c(NA, 201:203), replace = TRUE, 10)) df #> a b c #> 1 2 102 203 #> 2 1 102 202 #> 3 1 NA 203 #> 4 2 102 201 #> 5 NA 101 201 #> 6 NA 101 202 #> 7 1 NA 203 #> 8 1 101 NA #> 9 2 101 203 #> 10 1 103 201 df %>% mutate_all(~ifelse(is.na(.x), mean(.x, na.rm = TRUE), .x)) #> a b c #> 1 2.000 102.000 203.0000 #> 2 1.000 102.000 202.0000 #> 3 1.000 101.625 203.0000 #> 4 2.000 102.000 201.0000 #> 5 1.375 101.000 201.0000 #> 6 1.375 101.000 202.0000 #> 7 1.000 101.625 203.0000 #> 8 1.000 101.000 202.1111 #> 9 2.000 101.000 203.0000 #> 10 1.000 103.000 201.0000 df %>% mutate_at(vars(a, b),~ifelse(is.na(.x), mean(.x, na.rm = TRUE), .x)) #> a b c #> 1 2.000 102.000 203 #> 2 1.000 102.000 202 #> 3 1.000 101.625 203 #> 4 2.000 102.000 201 #> 5 1.375 101.000 201 #> 6 1.375 101.000 202 #> 7 1.000 101.625 203 #> 8 1.000 101.000 NA #> 9 2.000 101.000 203 #> 10 1.000 103.000 201 中具有仅开发者配置,如下所示:

<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将包含在主server.xml配置中。