使用 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 中添加了三个文件夹
- evolutions/h2
- evolutions/mysql
- 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 连接到一个唯一的文件中。
我希望我帮助了任何其他开发人员...
我想准备我的应用程序以与多种数据库类型兼容。为了尝试它,我使用了 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 中添加了三个文件夹
- evolutions/h2
- evolutions/mysql
- 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 连接到一个唯一的文件中。
我希望我帮助了任何其他开发人员...