Các bước cần thiết để sử dụng cơ sở dữ liệu MySQL với Play framework 2.0


91

Tôi mới làm quen với Play framework. Tôi đang cố gắng định cấu hình cơ sở dữ liệu MySQL làm nguồn dữ liệu được sử dụng với Play Ebeans.

Bạn có thể vui lòng giải thích các bước cần thiết để cấu hình MySQL với Play 2.0 framework (như, tải xuống trình điều khiển, thêm phụ thuộc, v.v.).

Câu trả lời:


102

Xem trang này từ tài liệu của Play. Nó nói rằng:

Ngoài cơ sở dữ liệu trong bộ nhớ h2, hữu ích chủ yếu trong chế độ phát triển, Play 2.0 không cung cấp bất kỳ trình điều khiển cơ sở dữ liệu nào. Do đó, để triển khai trong sản xuất, bạn sẽ phải thêm trình điều khiển cơ sở dữ liệu của mình làm phụ thuộc ứng dụng.

Ví dụ: nếu bạn sử dụng MySQL5, bạn cần thêm phần phụ thuộc cho trình kết nối:

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

SBT sẽ tải xuống trình điều khiển cho bạn. Bạn cũng nên xem phần quản lý phần phụ thuộc .

Để kết nối với MySQL, bạn cũng sẽ cần thay đổi một số cài đặt trong application.conf:

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

cảm ơn. Sau khi hoàn tất, tôi sẽ thực hiện những thay đổi cấu hình nào trong tệp application.conf? (db.default.driver, db.default.url, v.v.)
Veera

@Carsten, cung cấp url mà không có dấu ngoặc kép sẽ không thành công
biesior

3
khung chơi 2.1.1 tại đây. sau khi cập nhật build.sbt, bạn nên cung cấp cho các lệnh 'cập nhật' trong nhà ga chơi
Kinjal Dixit

9
Ngày nay, nó nên được thêm vào build.sbt ở cấp cơ sở của dự án, ví dụ: libraryDependencies ++ = Seq (javaJdbc, javaEbean, "mysql"% "mysql-connector-java"% "5.1.28", bộ nhớ cache)
Adrian Scott

Khi bạn làm cho nó hoạt động, bạn cũng nên đọc phần nhóm luồng của tài liệu và cập nhật cấu hình của bạn cho phù hợp vì jdbc là một API chặn. playframework.com/documentation/2.2.x/ThreadPools
johanandren

94

Như Carsten đã viết, nó có thể được tìm nạp từ tài liệu, tuy nhiên đây là bản tóm tắt:

đảm bảo rằng bạn đã định cấu hình phần phụ thuộc /project/Build.scala

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

Thêm cấu hình phù hợp của DB (thay thế cấu hình H2 mặc định) trong /conf/application.conf:

(không xóa mã hóa khỏi 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

trong cùng một tệp tìm và đảm bảo rằng dòng này KHÔNG được nhận xét:

ebean.default="models.*"

Đó là tất cả, khởi động lại ứng dụng của bạn (hoặc chạy ở chế độ nhà phát triển), sau đó nó sẽ tạo một DDL và yêu cầu bạn áp dụng nó.


Bạn có thể vui lòng cập nhật tài liệu tại đây github.com/playframework/playframework/blob/2.2.x/documentation/… để mọi người cùng có lợi được không? Cảm ơn!
Lavixu 23/12/13

Những điều khác cần xem xét là đảm bảo rằng MySQL không bị giới hạn ở các kết nối chỉ socket (Mac / Linux) và localhostcó thể cần phải thay thế bằng 127.0.0.1. Về specifict, sử dụng MariaDB (một thả Oracle-miễn phí thay thế cho MySQL) từ MacPorts tôi đã phải nhận xét ra skip-mạng trong my.cnfvà sử dụng địa chỉ IP thay vì localhostphải chơi thành công kết nối.
seron

Tại sao bạn thêm jdbc vào đầu url db?
BenMorganIO

@BenMorganIO gây chúng ta cần phải sử dụng trình điều khiển JDBC, một cú pháp như vậy, không có gì hơn
biesior

Tôi bối rối. Mục đích của "jdbc: mysql:" trong URL là gì? "Jdbc: mysql" có phải là tên của cơ sở dữ liệu không?
Michael Lafayette

10

Tôi đang sử dụng play 2.2.0 và tôi chỉ cần thêm dòng sau vào build.sbt trong thư mục gốc của dự án.

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

Và chơi tự động tải xuống trình điều khiển. Có vẻ như Build.scala không cần thiết cho việc này nữa. Các thay đổi đối với application.conf nên được áp dụng như các nhà bình luận ở trên đã đề cập.


Điều này vừa cứu tôi. Sử dụng Play 2.10.3 và đây là cách chính xác để làm điều đó.
Jack Slingerland

3
Cảm ơn bạn!!! Đối với những người cần hướng dẫn chi tiết như tôi, về cơ bản bạn vào build.sbt và thêm dòng đó vàolibraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
Dao Lam

1
Đối với những người như tôi, đừng quên dừng ./activator, và sau đó chạy lại :)
Damir Olejar

8

Hầu hết các phương pháp truy cập cơ sở dữ liệu mysql mà tôi đã xem qua không giải thích cách thiết lập kết nối và truy xuất dữ liệu từ bên trong Mô hình. Trong ứng dụng của mình, tôi đang sử dụng cả mongoDB và cơ sở dữ liệu mysql bên ngoài. Vì vậy, đây là cách tôi đã làm (phía mysql của) mọi thứ:

  1. Đối với Play 2.3.3, trong tệp build.sbt, hãy thêm dòng cụ thể mysql vào thư viện

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-java" % "5.1.27"
    )
  2. Trong tệp /conf/application.conf, thêm cái này:

    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

    Bạn có thể thay thế "myotherdb" bằng "default" trong trường hợp bạn muốn sử dụng cơ sở dữ liệu mặc định hoặc bằng bất kỳ tên nào khác mà bạn muốn sử dụng. Thay thế "xxx.xxx.xxx.xxx" bằng địa chỉ IP của máy chủ nơi đặt cơ sở dữ liệu của bạn (trong trường hợp cơ sở dữ liệu bên ngoài) hoặc localhost (hoặc 127.0.0.1) cho cơ sở dữ liệu cục bộ. Thay thế "NameOfOtherDB" bằng tên của cơ sở dữ liệu mà bạn muốn sử dụng, "MyOtherDbUSername" bằng tên người dùng cơ sở dữ liệu của bạn và "MyOtherDbPass" bằng mật khẩu cơ sở dữ liệu của bạn.

  3. Bên trong Mô hình của bạn (/app/models/MyModel.scala), hãy thêm cái này:

    val connection = DB.getConnection("myotherdb")
  4. Tạo câu lệnh, truy vấn và thực thi nó:

    val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val query = "SELECT * FROM myTableName"
    val resultset = statement.executeQuery(query)
  5. Sau đó, bạn có thể tiếp tục với bất cứ điều gì bạn muốn làm với dữ liệu đã truy xuất. Ví dụ:

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

    Trong đó "columnName" là tên của cột / trường trong bảng DB mà bạn muốn truy xuất.

Cuối cùng nhưng không kém phần quan trọng, tôi muốn lưu ý rằng bạn có thể muốn đóng kết nối bằng cách gọi close ()


1
Ví dụ của bạn rất hữu ích. Nó trông như thế nào đối với Play Java?
lomse

6

Bị mắc kẹt với cấu hình MySQL của tôi cho đến khi tôi tìm thấy điều này.

Những điều quan trọng nhất được lấy từ câu trả lời @biesior:

  • Thêm trình kết nối MySQL / J trong phần phụ thuộc của dự án (bên trong /project/Build.scala )
  • Sau khi thêm phần phụ thuộc, hãy chạy play dependencies để giải quyết trình kết nối MySQL / phụ thuộc J mới được thêm
  • Dòng cấu hình ebean mặc định bỏ ghi chú ebean.default="models.*"
  • Định cấu hình cơ sở dữ liệu MySQL chính xác với mã hóa ký tự thích hợp 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

Nó đã cứu một ngày của tôi.


4

Để chơi 2.3.1 , hãy làm theo các bước sau.

1) Thêm trình kết nối MySQL / J trong phần phụ thuộc của dự án (nằm trong /project/build.sbt)

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

2) Bỏ ghi chú dòng cấu hình ebean mặc định ebean.default = "các mô hình. *"

3) Định cấu hình cơ sở dữ liệu MySQL chính xác với mã hóa ký tự thích hợp

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) Hầu hết Imp. Chạy lệnh tải lại trong bảng điều khiển.


Điều này hoàn toàn ổn đối với tôi tại địa phương. Nhưng khi tôi tạo gói dist, hãy tải gói lên máy chủ Ubuntu và thử khởi động ứng dụng tôi nhận được java.sql.SQLException: No suitable driver found for mysql://....
Nick

thử đặt trình điều khiển mysql của bạn trong classpath.
làm việc

Tôi đã thêm nó vào libraryDependencies trong build.sbt của mình (làm cho nó hoạt động cục bộ) và trên máy chủ mà tôi đã cài đặt nó bằng sudo apt-get install mysql-client; sudo apt-get install libmysql-javaput export CLASSPATH=/usr/share/java/mysql-connector-java.jarvà cũng đã thêm nó vào /etc/environment(như được mô tả trên help.ubuntu.com/community/JDBCAndMySQL ). Nó vẫn không hoạt động.
Nick

4

Chơi 2.4.3 & MYSQL 5.7.9

Tôi đã có thể làm cho điều này hoạt động bằng cách ghép các bit thông tin lại với nhau từ tất cả các câu trả lời trước đó. Vì vậy, đây là một cái khác, hy vọng sẽ cập nhật hơn hoặc hữu ích hơn cho những người có môi trường tương tự.

Chi tiết môi trường: ( đây là những gì tôi đang sử dụng )

  • Chơi 2.4.3 này đi kèm với kích hoạt-1.3.7-tối thiểu
  • JDK8, bạn nên có cái này vì tôi không nghĩ rằng phiên bản chơi này hoạt động với 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

Ghi chú:

  • testSchema trong URL là tên cơ sở dữ liệu của bạn, nếu bạn đang sử dụng một cái gì đó như MYSQL workbench, bạn sẽ thấy điều này được liệt kê trong phần SCHEMAS. Tôi đã gọi testSchema của tôi. Những người khác có thể gọi nó giống như "myDatabase"
  • Cổng phải là cổng MYSQL. Không phải cổng ứng dụng của bạn. Tôi đưa 3306vào ví dụ vì đó thường là mặc định cho MYSQL.

build.sbt

Thêm dòng này bên dưới vào tệp build.sbt của bạn. Điều này sẽ xảy ra sau khi libraryDependencies ++= Seq()khai báo.

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

Cuối cùng

  • chạy lệnh này từ gốc dự án của bạn -> activator reload
  • khởi động lại ứng dụng của bạn

1

Để chơi dự án java bằng SBT

Thay đổi thư việnDependency thành llok như thế này trong "build.sbt"

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

Chạy dự án của bạn bằng cách sử dụng "activator run"

Phát sẽ xuống đầu nối jdbc cần thiết.


1

Tôi đã gặp vấn đề tương tự trong khung chơi mới nhất 2.4.x với trình kích hoạt 1.3.6.

Đây là các bước. Tôi đã làm theo các bước được mô tả tại đây https://www.playframework.com/documentation/2.4.x/JavaDatabase

Đây là 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.*"]

Đây là 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")

Đây là bước quan trọng.

Sau khi cấu hình các bước trên, hãy chuyển đến dòng lệnh, dừng trình kích hoạt của bạn và chạy lệnh activator run. Trong tình huống của tôi, tôi tiếp tục nhận lỗi unable to find mysql drivers. Sau khi chạy activator run, trình kích hoạt sẽ thực sự tải xuống các trình điều khiển MySQL và sẽ giải quyết các phần phụ thuộc. Đó là bước quan trọng giải quyết vấn đề của tôi.


1

Đối với tôi công việc này, hãy thêm dòng này bên dưới vào phần phụ thuộc của bạn:

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

Đây là mã:

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()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.