Play 프레임 워크 2.0에서 MySQL 데이터베이스를 사용하는 데 필요한 단계


91

저는 Play 프레임 워크를 처음 사용합니다. MySQL 데이터베이스를 Play Ebeans와 함께 사용할 데이터 소스로 구성하려고합니다.

Play 2.0 프레임 워크로 MySQL을 구성하는 데 필요한 단계 (드라이버 다운로드, 종속성 추가 등)를 설명해 주시겠습니까?

답변:


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, 따옴표없이 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", cache)
— Adrian Scott

작동하게되면 jdbc가 차단 API이기 때문에 문서의 스레드 풀 섹션을 읽고 그에 따라 구성을 업데이트해야합니다. playframework.com/documentation/2.2.x/ThreadPools
— johanandren 2014-01-17

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

고려해야 할 다른 일들이 MySQL의 소켓 연결 만 (맥 / 리눅스) 및 그 제한되지 않는다 있는지 확인하는 것입니다 localhost으로 교체해야 할 수 있습니다 127.0.0.1. 사용 specifict의 관점에서 MariaDB MacPorts를에서 (MySQL의 교체에 오라클이없는 드롭을) 나는 주석했다 건너 뛰기 네트워크 에서 my.cnf사용할 IP 주소를 대신 localhost성공적으로 연결 플레이하도록.
— seron

DB URL 시작 부분에 jdbc를 추가 한 이유는 무엇입니까?
— BenMorganIO

@BenMorganIO 원인 우리는 JDBC 드라이버, 그런 구문, 더 이상 사용할 필요가 없습니다
— biesior

혼란 스럽습니다. URL에서 "jdbc : mysql :"의 목적은 무엇입니까? "jdbc : mysql"이 데이터베이스의 이름입니까?
— Michael Lafayette

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")
— 다오 램

1
나 같은 사람의 경우, ./activator을 중지하는 것을 잊지 마세요, 다음 : 다시 실행
— 미르 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"를 "default"로 바꿀 수 있습니다. "xxx.xxx.xxx.xxx"를 데이터베이스가있는 서버 (외부 데이터베이스의 경우) 또는 로컬 데이터베이스의 경우 localhost (또는 127.0.0.1)의 IP 주소로 바꿉니다. "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

6

이것을 찾을 때까지 내 MySQL 구성을 고수했습니다.

@biesior 답변에서 가져온 가장 중요한 것 :

  • 프로젝트의 종속성 (내부에 있음 /project/Build.scala)에 MySQL 커넥터 / J 추가
  • 종속성을 추가 한 후 실행 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) 대부분의 임프. 콘솔에서 다시로드 명령을 실행하십시오 .


이것은 모두 로컬에서 완벽하게 작동합니다. 하지만 dist 패키지를 만들 때 패키지를 Ubuntu 서버에 업로드하고 내가받은 java.sql.SQLException: No suitable driver found for mysql://....
— Nick

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에 설명 됨 ). 여전히 작동하지 않습니다.
— Nick

4

2.4.3 및 MYSQL 5.7.9 플레이

나는 이전의 모든 답변에서 얻은 정보를 모아서 이것을 작동시킬 수있었습니다. 그래서 여기에 또 다른 것이 있는데, 이것은 비슷한 환경을 가진 사람들에게 더 최신이거나 유용하기를 바랍니다.

환경 세부 정보 : ( 이것은 내가 사용하고있는 것입니다 )

  • Play 2.4.3은 activator-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를 사용한 플레이 자바 프로젝트

"build.sbt"에서 다음과 같이 libraryDependency를 변경하십시오.

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

"액티베이터 실행"을 사용하여 프로젝트 실행

필요한 jdbc 커넥터를 재생합니다.


1

Activator 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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.