将MySQL数据库与Play Framework 2.0结合使用所需的步骤


91

我是Play框架的新手。我正在尝试将MySQL数据库配置为与Play Ebeans一起使用的数据源。

能否请您解释一下用Play 2.0框架配置MySQL所需的步骤(例如,下载驱动程序,添加依赖项等)。

Answers:


102

从Play的文档中查看此页面。它说:

除了适用于h2内存数据库(主要在开发模式下使用)之外,Play 2.0不提供任何数据库驱动程序。因此,要在生产环境中进行部署,您将必须将数据库驱动程序添加为应用程序依赖项。

例如,如果使用MySQL5,则需要为连接器添加依赖项:

val appDependencies = Seq(
    // Add your project dependencies here,
    ...
    "mysql" % "mysql-connector-java" % "5.1.18"
    ...
)

SBT将为您下载驱动程序。您还应该查看有关管理依赖项的部分

要连接到MySQL,您还需要在您的中更改一些设置application.conf

db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:secret@localhost/myDatabase"

谢谢。完成后,我应该在application.conf文件中进行哪些配置更改?(db.default.driver,db.default.url等)
Veera

@Carsten,提供不带引号的网址将会失败
biesior 2012年

3
在此处播放框架2.1.1。更新build.sbt之后,您应该在播放终端中输入命令“ update”
Kinjal Dixit 2013年

9
如今,应将其添加到项目根目录下的build.sbt中,例如:libraryDependencies ++ = Seq(javaJdbc,javaEbean,“ mysql”%“ mysql-connector-java”%“ 5.1.28”,缓存)
Adrian Scott

当它开始工作时,您还应该阅读文档的线程池部分并相应地更新配置,因为jdbc是一个阻塞API。playframework.com/documentation/2.2.x/ThreadPools
johanandren 2014年

94

正如Carsten所写,可以从文档中获取,但是这里是一个摘要:

确保您在其中配置了依赖项 /project/Build.scala

val appDependencies = Seq(
    // Add your project dependencies here,
    "mysql" % "mysql-connector-java" % "5.1.18"
)

在以下位置添加适当的数据库配置(替换默认的H2配置)/conf/application.conf

(请勿从网址中删除编码):

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/your_db_name?characterEncoding=UTF-8"
db.default.user=your_login
db.default.password=your_pass

在同一文件中找到并确保未注释此行:

ebean.default="models.*"

就这样,重新启动您的应用程序(或以开发人员模式运行),然后它将创建一个DDL并要求您应用它。


您能否在这里github.com/playframework/playframework/blob/2.2.x/documentation/…上更新文档,以便每个人都能受益?谢谢!
Lavixu 2013年

需要考虑的其他事情是确保MySQL不限于仅套接字连接(Mac / Linux),并且localhost可能需要替换为127.0.0.1。在specifict而言,使用MariaDB的从MacPorts的(置换于Oracle的自由跌落为MySQL),我不得不注释掉跳网络my.cnf,使用IP地址而不是localhost有玩连接成功。
seron 2014年

为什么将jdbc添加到数据库URL的开头?
BenMorganIO 2014年

@BenMorganIO,因为我们需要使用JDBC驱动程序,这种语法,仅此而已
biesior 2014年

我很困惑。URL中“ jdbc:mysql:”的目的是什么?数据库名称是“ jdbc:mysql”吗?
Michael Lafayette

10

我正在使用play 2.2.0,我只需要在项目的根文件夹中添加以下行build.sbt。

  "mysql" % "mysql-connector-java" % "5.1.27"

并自动播放下载驱动程序。看来Build.scala不再需要此功能。如上面的注释者所述,应该对application.conf进行更改。


这救了我。使用Play 2.10.3,这是正确的方法。
Jack Slingerland

3
谢谢!!!对于像我这样需要详细说明的人,您基本上是去build.sbt并将该行添加到libraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
Lam

1
对于像我这样的人,不要忘记停止./activator,然后再次运行它:)
Damir Olejar 2015年

8

我碰到的大多数访问mysql数据库的方法都没有解释如何在模型中建立连接和检索数据。在我的应用程序中,我同时使用mongoDB和外部mysql数据库。所以这是我做的事情(在mysql方面):

  1. 对于Play 2.3.3,在build.sbt文件中的libraryDependencies中添加mysql特定行:

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-java" % "5.1.27"
    )
  2. 在/conf/application.conf文件中添加以下内容:

    db.myotherdb.driver = com.mysql.jdbc.Driver
    db.myotherdb.url = "jdbc:mysql://xxx.xxx.xxx.xxx/NameOfOtherDB?characterEncoding=UTF-8"
    db.myotherdb.user = MyOtherDbUSername
    db.myotherdb.password = MyOtherDbPass

    如果要使用默认数据库或要使用的任何其他名称,可以将“ myotherdb”替换为“ default”。将“ xxx.xxx.xxx.xxx”替换为数据库所在服务器的IP地址(对于外部数据库)或本地数据库的localhost(或127.0.0.1)。将“ NameOfOtherDB”替换为要使用的数据库的名称,将“ MyOtherDbUSername”替换为数据库的用户名,将“ MyOtherDbPass”替换为数据库的密码。

  3. 在您的模型(/app/models/MyModel.scala)内添加以下内容:

    val connection = DB.getConnection("myotherdb")
  4. 创建语句,查询并执行它:

    val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val query = "SELECT * FROM myTableName"
    val resultset = statement.executeQuery(query)
  5. 然后,您可以继续处理检索到的数据。例如:

    while (resultset.next()) {
        resultset.getString("columnName")
    }

    其中“ columnName”是您要检索的数据库表列/字段的名称。

最后但并非最不重要的一点,我想指出您可能想通过调用close()关闭连接


1
您的示例非常有用。Play Java的外观如何?
lomse 2014年

6

坚持使用我的MySQL配置,直到找到它为止。

最重要的事情来自@biesior答案:

  • 在项目的依赖项中添加MySQL Connector / J(位于里面/project/Build.scala
  • 添加依赖项后,运行play dependencies以解决新添加的MySQL连接器/ J依赖项
  • 取消注释默认的ebean配置行 ebean.default="models.*"
  • 使用正确的字符编码正确配置MySQL数据库 db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://www.sample.com:3306/test?characterEncoding=UTF-8" db.default.user=playuser db.default.pass=playuser

它挽救了我的一天。


4

对于播放2.3.1,请按照以下步骤操作。

1)在项目的依赖项中添加MySQL Connector / J(位于/project/build.sbt内部)

libraryDependencies ++= Seq( javaJdbc, javaEbean, "mysql" % "mysql-connector-java" % "5.1.29"

2)取消注释默认的ebean配置行ebean.default =“ models。*”

3)使用正确的字符编码正确配置MySQL数据库

db.default.driver=com.mysql.jdbc.Driver    //this is com. and not org.
db.default.url="jdbc:mysql://127.0.0.1/test?characterEncoding=UTF-8"
db.default.user=playuser
db.default.pass=playuser

4)大多数展示。在控制台中运行重新加载命令。


这对我本地而言一切正常。但是,当我创建一个dist软件包时,将该软件包上传到Ubuntu服务器并尝试启动我得到的应用程序java.sql.SQLException: No suitable driver found for mysql://...
尼克

尝试将您的mysql驱动程序放在classpath中。
工作

我已经将它添加到build.sbt中的libraryDependencies中(这使得它可以在本地运行),并且在我使用sudo apt-get install mysql-client; sudo apt-get install libmysql-javaput 安装它的服务器上export CLASSPATH=/usr/share/java/mysql-connector-java.jar,还添加了它/etc/environment(如help.ubuntu.com/community/JDBCAndMySQL所述)。它仍然不起作用。
尼克

4

播放2.4.3和MYSQL 5.7.9

通过将所有先前答案中的信息拼凑在一起,我能够使此工作正常进行。所以这是另一种,希望它是最新的,或对具有类似环境的人有用。

环境信息:这是我使用

  • 播放2.4.3,附带激活器1.3.7-最小
  • JDK8,您应该已经拥有该版本,因为我认为此版本的游戏不适用于JDK7
  • MYSQL 5.7.9

appication.conf

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/testSchema?characterEncoding=UTF-8"
db.default.user=yourDBUserName
db.default.password=yourDBUserPass

注意:

  • URL中的testSchema是您的数据库名称,如果使用的是MYSQL工作台之类的内容,则将在SCHEMAS部分下看到它。我叫我的testSchema。其他人可能将其称为“ myDatabase”
  • 该端口应为MYSQL端口。不是您的应用程序端口。我放入3306示例,因为这通常是MYSQL的默认设置。

build.sbt

将以下行添加到build.sbt文件中。这应该在libraryDependencies ++= Seq()声明之后。

libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.36"

最后

  • 从项目根目录运行此命令-> activator reload
  • 重新开始您的应用

1

使用SBT播放Java项目

在“ build.sbt”中将libraryDependency更改为llok

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs,
  "mysql" % "mysql-connector-java" % "5.1.27"
)

使用“激活器运行”运行项目

播放将关闭所需的jdbc连接器。


1

我在带有激活器1.3.6的最新播放框架2.4.x中遇到了相同的问题。

步骤如下。我遵循了此处描述的步骤https://www.playframework.com/documentation/2.4.x/JavaDatabase

这是我的 application.conf

# MySQL DB Configuration
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://{hostname or ipaddres}/{db name}?characterEncoding=UTF-8"
db.default.username=username  // Note that user id deprecated, instead use username. Though that is not a major issue
db.default.password="password"

# JPA Configurations
jpa.default=defaultPersistenceUnit
PlayKeys.externalizeResources = false

# JavaEbean configuration
ebean.default = ["models.*"]

这是 build.sbt

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  javaJpa,
  evolutions,
  "mysql" % "mysql-connector-java" % "5.1.27"
)

plugins.sbt

// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.3")

// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0")

// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")

// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using
// enablePlugins(SbtEbean). Note, uncommenting this line will automatically bring in
// Play enhancer, regardless of whether the line above is commented out or not.
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0")

这是重要的一步。

配置完上述步骤后,转到命令行,停止激活器并运行命令activator run。在我的情况下,我一直在出错unable to find mysql drivers。在运行之后activator run,激活器实际上将下载MySQL驱动程序并解决依赖关系。那是解决我的问题的重要步骤。


1

对于我来说,这项工作是将以下行添加到您的依赖项中:

"mysql" % "mysql-connector-java" % "5.1.36"

这是代码:

import java.sql.Connection

val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://localhost/world"
val username = "root"
val password = "root"
var connection: Connection = null

try {
    // make the connection
    Class.forName(driver)
    connection = DriverManager.getConnection(url, username, password)

    // create the statement, and run the select query
    val statement = connection.createStatement()
    val resultSet = statement.executeQuery("SELECT id , name FROM bar")

    val sql: SqlQuery = SQL("select * from products order by name asc")

    while (resultSet.next()) {
        val id = resultSet.getString("id")
        val name = resultSet.getString("name")
        println(id, name)
    }
} catch {
case e: Exception => println("exception caught: " + e);
}
connection.close()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.