MySQLデータベースをPlayフレームワーク2.0で使用するために必要な手順


91

Playフレームワークは初めてです。MySQLデータベースをPlay Ebeansで使用するデータソースとして設定しようとしています。

MySQLをPlay 2.0フレームワークで構成するために必要な手順(ドライバーのダウンロード、依存関係の追加など)を説明してください。

回答:


102

見てくださいこのページプレイのドキュメントから。それは言う:

Play 2.0は、主に開発モードで有用なh2インメモリデータベースを除いて、データベースドライバーを提供しません。したがって、運用環境で展開するには、データベースドライバーをアプリケーションの依存関係として追加する必要があります。

たとえば、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、引用符なしでURLを与えると失敗します
biesior

3
ここでフレームワーク2.1.1をプレイします。build.sbtを更新した後、playターミナルでコマンド 'update'を実行する必要があります
Kinjal Dixit

9
最近では、プロジェクトのルートレベルでbuild.sbtに追加する必要があります。例:libraryDependencies ++ = Seq(javaJdbc、javaEbean、 "mysql"% "mysql-connector-java"% "5.1.28"、キャッシュ)
エイドリアンスコット

jdbcはブロッキングAPIであるため、機能するようになったら、ドキュメントのスレッドプールセクションを読み、それに応じて構成を更新する必要があります。playframework.com/documentation/2.2.x/ThreadPools
johanandren

94

Carstenが書いたように、ドキュメントから取得できますが、ここに要約があります:

依存関係が構成されていることを確認してください /project/Build.scala

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

DBの適切な構成を追加します(デフォルトのH2構成を置き換えます)。 /conf/application.conf

(URLからエンコーディングを削除しないでください):

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のIから(MySQL用の交換でのOracleフリードロップ)はコメントアウトしなければならなかったスキップ・ネットワーキングではmy.cnf、代わりのIPアドレスを使用してlocalhost正常に接続を再生する必要があります。
セロン2014年

jdbcをdb urlの先頭に追加したのはなぜですか?
BenMorganIO 2014年

私たちは、JDBCドライバは、そのような構文、より多くの何を使用する必要が@BenMorganIO原因
biesior

よくわかりません。URLの「jdbc:mysql:」の目的は何ですか?「jdbc:mysql」はデータベースの名前ですか?
マイケルラファイエット

10

私はplay 2.2.0を使用しており、プロジェクトのルートフォルダーにあるbuild.sbtに次の行を追加する必要がありました。

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

そしてplayは自動的にドライバーをダウンロードします。Build.scalaはもう必要ないようです。上記の解説者が述べたように、application.confへの変更を適用する必要があります。


これはちょうど私を救った。Play 2.10.3を使用すると、これが正しい方法でした。
Jack Slingerland、2013年

3
ありがとうございました!!!私のような詳細な手順が必要な人は、基本的にbuild.sbtに移動して、次の行を追加しますlibraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
Dao Lam

1
私のような人にとっては、。/ activatorを停止して、もう一度実行することを忘れないでください:)
Damir Olejar

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」を「デフォルト」に置き換えることができます。「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」は、取得するDBテーブルの列/フィールドの名前です。

最後に重要なことですが、close()を呼び出して接続を閉じることをお勧めします。


1
あなたの例はとても役に立ちます。Play Javaの場合はどのように見えますか?
lomse 2014年

6

これが見つかるまで、MySQLの設定にこだわっていました。

@biesiorの回答から取られた最も重要なこと:

  • MySQLコネクター/ 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)プロジェクトの依存関係(/project/build.sbt内にあります)にMySQLコネクター/ Jを追加します

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)ほとんどのインプ。コンソールでreloadコマンドを実行します。


これは、私にとってはすべて完璧に機能します。しかし、distパッケージを作成したら、パッケージをUbuntuサーバーにアップロードし、取得したアプリケーションを起動してみますjava.sql.SQLException: No suitable driver found for mysql://...
ニック

mysqlドライバーをクラスパスに配置してみてください。
勤務

これを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/environmenthelp.ubuntu.com/community/JDBCAndMySQLで説明されています)。それでも動作しません。
Nick

4

Play 2.4.3およびMYSQL 5.7.9

以前のすべての回答からの情報の断片をつなぎ合わせることで、これを機能させることができました。だからここに別のものがあります、それはうまくいけばもっと最新のものであるか、同様の環境を持つ人々にとって有用です。

環境詳細:これは私が使っているものです

  • Play 2.4.3にはこれが付属しています activator-1.3.7-minimal
  • 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

注意:

  • MYSQLワークベンチなどを使用している場合、URLのtestSchemaはデータベース名です場合は、これがSCHEMASセクションの下に表示されます。私はtestSchemaを呼び出しました。他の人はそれを「myDatabase」のようなものと呼ぶかもしれません
  • ポートはMYSQLポートでなければなりません。アプリケーションポートではありません。これ3306は通常MYSQLのデフォルトであるため、この例を使用しました。

build.sbt

以下の行をbuild.sbtファイルに追加します。これはlibraryDependencies ++= Seq()宣言の後に行ってください。

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

最後に

  • プロジェクトのルートからこのコマンドを実行します-> activator reload
  • アプリケーションを再起動します

1

SBTを使用したPlay Javaプロジェクトの場合

「build.sbt」で、libraryDependencyを次のようにllokに変更します。

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

「activator run」を使用してプロジェクトを実行します

Playは必要なJDBCコネクタをダウンさせます。


1

アクティベーター1.3.6を搭載した最新のPlayフレームワーク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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.