【问题标题】:Prepare multi-databases with play framework使用 play 框架准备多数据库
【发布时间】:2015-04-26 09:47:23
【问题描述】:

我想让我的应用程序与许多数据库类型兼容。为了尝试它,我使用了 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. 进化/h2
  2. 进化/mysql
  3. 进化/postgresql

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

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

而这个conf文件是

include "postgresql.conf"

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

但是通过这种配置,当我的应用程序尝试连接到 DB 时: 默认的 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$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
        at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
        at scala.collection.immutable.List.foreach(List.scala:383)
        at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:91)
        at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
        at play.api.Play$$anonfun$start$1.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$3.apply(NettyServer.scala:289)
        at play.core.server.NettyServer$$anonfun$main$3.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$3.apply(DB.scala:438)
        at play.api.db.BoneCPApi$$anonfun$getDataSource$3.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$1.apply(DB.scala:142)
        at play.api.db.DB$$anonfun$getDataSource$1.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)

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

【问题讨论】:

  • 我忘记了:我使用的是 Play 2.3

标签: database playframework


【解决方案1】:

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

有 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 to play 2.3.x 不起作用,因为 conf 文件夹没有添加到类路径中(参考 Load file from '/conf' directory on Cloudbees)所以我们必须 concat prod.conf、postgresql.conf 和不要忘记将.conf 放到一个单独的文件中。

我希望我已经帮助了任何其他开发者...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多