使用 play 框架准备多数据库

Prepare multi-databases with play framework

我想准备我的应用程序以与多种数据库类型兼容。为了尝试它,我使用了 H2、MySql 和 Postgresql。所以'我添加到 build.sbt :

"mysql" % "mysql-connector-java" % "5.1.35",
"org.postgresql" % "postgresql" % "9.4-1201-jdbc41"

并且我添加了 conf/prod.conf 以及所有没有数据库配置的配置,以及 3 个文件: conf/h2.conf

include "prod.conf"

db.h2.driver=org.h2.Driver
db.h2.url="jdbc:h2:mem:dontforget"
db.h2.jndiName=DefaultDS
ebean.h2="fr.chklang.dontforget.business.*"

conf/mysql.conf

include "prod.conf"

db.mysql.driver=com.mysql.jdbc.Driver
db.mysql.jndiName=DefaultDS
ebean.mysql="fr.chklang.dontforget.business.*"

conf/postgresql.conf

include "prod.conf"

db.postgresql.driver=org.postgresql.Driver
db.postgresql.jndiName=DefaultDS
ebean.postgresql="fr.chklang.dontforget.business.*"

添加到其中我在 conf/evolutions 中添加了三个文件夹

  1. evolutions/h2
  2. evolutions/mysql
  3. evolutions/postgresql

有了这些东西,用户可以使用此命令启动我的应用程序:

-Dconfig.file=dontforget-conf.conf -DapplyEvolutions.default=true -Dhttp.port=10180 &

而这个配置文件是

include "postgresql.conf"

db.postgresql.url="jdbc:postgresql:dontforget"
db.postgresql.user=myUserName
db.postgresql.password=myPassword

但是使用这种配置,当我的应用程序尝试连接到数据库时: 默认的 EbeanServer 没有被定义?这通常通过 ebean.datasource.default 属性 设置。否则应该通过 registerServer()]]

以编程方式注册

所以我尝试添加到我的配置中:

ebean.datasource.default=postgresql

但是当我添加它时我已经:

Configuration error: Configuration error[Configuration error[]]
        at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:94)
        at play.api.Configuration.reportError(Configuration.scala:743)
        at play.Configuration.reportError(Configuration.java:310)
        at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:56)
        at play.api.Play$$anonfun$start$$anonfun$apply$mcV$sp.apply(Play.scala:91)
        at play.api.Play$$anonfun$start$$anonfun$apply$mcV$sp.apply(Play.scala:91)
        at scala.collection.immutable.List.foreach(List.scala:383)
        at play.api.Play$$anonfun$start.apply$mcV$sp(Play.scala:91)
        at play.api.Play$$anonfun$start.apply(Play.scala:91)
        at play.api.Play$$anonfun$start.apply(Play.scala:91)
        at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
        at play.api.Play$.start(Play.scala:90)
        at play.core.StaticApplication.<init>(ApplicationProvider.scala:55)
        at play.core.server.NettyServer$.createServer(NettyServer.scala:253)
        at play.core.server.NettyServer$$anonfun$main.apply(NettyServer.scala:289)
        at play.core.server.NettyServer$$anonfun$main.apply(NettyServer.scala:284)
        at scala.Option.map(Option.scala:145)
        at play.core.server.NettyServer$.main(NettyServer.scala:284)
        at play.core.server.NettyServer.main(NettyServer.scala)
Caused by: Configuration error: Configuration error[]
        at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:94)
        at play.api.Configuration.reportError(Configuration.scala:743)
        at play.api.db.BoneCPApi.play$api$db$BoneCPApi$$error(DB.scala:271)
        at play.api.db.BoneCPApi$$anonfun$getDataSource.apply(DB.scala:438)
        at play.api.db.BoneCPApi$$anonfun$getDataSource.apply(DB.scala:438)
        at scala.Option.getOrElse(Option.scala:120)
        at play.api.db.BoneCPApi.getDataSource(DB.scala:438)
        at play.api.db.DB$$anonfun$getDataSource.apply(DB.scala:142)
        at play.api.db.DB$$anonfun$getDataSource.apply(DB.scala:142)
        at scala.Option.map(Option.scala:145)
        at play.api.db.DB$.getDataSource(DB.scala:142)
        at play.api.db.DB.getDataSource(DB.scala)
        at play.db.DB.getDataSource(DB.java:25)
        at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:54)

所以我不明白我该怎么做。

是的!!!我找到了!调试模式后(等...)

有 2 个问题。

第一个问题:我必须在我的 application.conf 中添加一个密钥:

ebeanconfig.datasource

对我来说(例如),postgresql.conf修改为:

db.postgresql.driver=org.postgresql.Driver
db.postgresql.jndiName=DefaultDS
ebean.postgresql="fr.chklang.dontforget.business.*"
ebeanconfig.datasource.default=postgresql

第二个问题:include into play 2.3.x 不起作用,因为 conf 文件夹未添加到类路径中(ref Load file from '/conf' directory on Cloudbees)所以我们必须将 prod.conf、postgresql.conf 和 dontforget.conf 连接到一个唯一的文件中。

我希望我帮助了任何其他开发人员...