저는 Play 프레임 워크를 처음 사용합니다. MySQL 데이터베이스를 Play Ebeans와 함께 사용할 데이터 소스로 구성하려고합니다.
Play 2.0 프레임 워크로 MySQL을 구성하는 데 필요한 단계 (드라이버 다운로드, 종속성 추가 등)를 설명해 주시겠습니까?
답변:
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"
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이 생성되고 적용을 요청합니다.
localhost
으로 교체해야 할 수 있습니다 127.0.0.1
. 사용 specifict의 관점에서 MariaDB MacPorts를에서 (MySQL의 교체에 오라클이없는 드롭을) 나는 주석했다 건너 뛰기 네트워크 에서 my.cnf
사용할 IP 주소를 대신 localhost
성공적으로 연결 플레이하도록.
play 2.2.0을 사용하고 있으며 프로젝트의 루트 폴더에 build.sbt에 다음 줄을 추가해야했습니다.
"mysql" % "mysql-connector-java" % "5.1.27"
그리고 play는 자동으로 드라이버를 다운로드합니다. Build.scala가 더 이상 필요하지 않은 것 같습니다. 위의 주석가가 언급 한대로 application.conf에 대한 변경 사항을 적용해야합니다.
libraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
내가 본 mysql 데이터베이스에 액세스하는 대부분의 방법은 연결을 설정하고 모델 내에서 데이터를 검색하는 방법을 설명하지 않습니다. 내 응용 프로그램에서 mongoDB와 외부 mysql 데이터베이스를 모두 사용하고 있습니다. 그래서 여기에 내가 (mysql 쪽) 일을 한 방법이 있습니다.
Play 2.3.3의 경우 build.sbt 파일에서 libraryDependencies에 mysql 특정 행을 추가하십시오.
libraryDependencies ++= Seq(
"mysql" % "mysql-connector-java" % "5.1.27"
)
/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"를 데이터베이스 암호로 바꿉니다.
모델 (/app/models/MyModel.scala) 안에 다음을 추가하십시오.
val connection = DB.getConnection("myotherdb")
문, 쿼리를 생성하고 실행합니다.
val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
val query = "SELECT * FROM myTableName"
val resultset = statement.executeQuery(query)
그런 다음 검색된 데이터로 원하는 작업을 계속할 수 있습니다. 예를 들면 :
while (resultset.next()) {
resultset.getString("columnName")
}
여기서 "columnName"은 검색하려는 DB 테이블 열 / 필드의 이름입니다.
마지막으로 close () 를 호출하여 연결을 닫고 싶을 수도 있습니다.
이것을 찾을 때까지 내 MySQL 구성을 고수했습니다.
@biesior 답변에서 가져온 가장 중요한 것 :
/project/Build.scala
)에 MySQL 커넥터 / J 추가play dependencies
하여 새로 추가 된 MySQL 커넥터 / J 종속성을 해결하십시오.ebean.default="models.*"
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
그것은 내 하루를 구했습니다.
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) 대부분의 임프. 콘솔에서 다시로드 명령을 실행하십시오 .
java.sql.SQLException: No suitable driver found for mysql://...
.
sudo apt-get install mysql-client; sudo apt-get install libmysql-java
put으로 설치하고 export CLASSPATH=/usr/share/java/mysql-connector-java.jar
추가했습니다 /etc/environment
( help.ubuntu.com/community/JDBCAndMySQL에 설명 됨 ). 여전히 작동하지 않습니다.
나는 이전의 모든 답변에서 얻은 정보를 모아서 이것을 작동시킬 수있었습니다. 그래서 여기에 또 다른 것이 있는데, 이것은 비슷한 환경을 가진 사람들에게 더 최신이거나 유용하기를 바랍니다.
환경 세부 정보 : ( 이것은 내가 사용하고있는 것입니다 )
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
노트 :
3306
일반적으로 MYSQL의 기본값이기 때문에 예제를 .build.sbt
아래의이 줄을 build.sbt 파일에 추가하십시오. 이것은 libraryDependencies ++= Seq()
선언 후에 진행되어야합니다 .
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.36"
드디어
activator reload
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 드라이버를 다운로드하고 종속성을 해결합니다. 이것이 내 문제를 해결 한 중요한 단계입니다.
나를 위해이 작업을 위해 아래 줄을 종속성에 추가하십시오.
"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()