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.