Pasos necesarios para utilizar la base de datos MySQL con Play framework 2.0

91

Soy nuevo en el marco de Play. Estoy tratando de configurar la base de datos MySQL como fuente de datos para usar con Play Ebeans.

¿Podría alguien explicar los pasos que se necesitan para configurar MySQL con el marco Play 2.0 (como descargar controladores, agregar dependencia, etc.).

Veera
fuente

Respuestas:

102

Mire esta página de la documentación de Play. Dice:

Aparte de la base de datos en memoria h2, útil principalmente en el modo de desarrollo, Play 2.0 no proporciona ningún controlador de base de datos. En consecuencia, para implementar en producción, deberá agregar su controlador de base de datos como una dependencia de la aplicación.

Por ejemplo, si usa MySQL5, debe agregar una dependencia para el conector:

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

SBT descargará el controlador por usted. También debería consultar la sección sobre gestión de dependencias .

Para conectarse a MySQL, también deberá cambiar algunas configuraciones en su application.conf:

db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:secret@localhost/myDatabase"
Carsten
fuente
Gracias. Una vez hecho esto, ¿cuáles serían los cambios de configuración que debería realizar en el archivo application.conf? (db.default.driver, db.default.url, etc.)
Veera
@Carsten, dar URL sin comillas fallará
biesior
3
play framework 2.1.1 aquí. después de actualizar build.sbt, debe dar el comando 'actualizar' en la terminal de juego
Kinjal Dixit
9
Hoy en día, debería agregarse a build.sbt en el nivel raíz del proyecto, por ejemplo: libraryDependencies ++ = Seq (javaJdbc, javaEbean, "mysql"% "mysql-connector-java"% "5.1.28", caché)
Adrian Scott
Cuando lo haga funcionar, también debe leer la sección del grupo de subprocesos de los documentos y actualizar su configuración en consecuencia, ya que jdbc es una API de bloqueo. playframework.com/documentation/2.2.x/ThreadPools
johanandren
94

Como escribió Carsten, se puede obtener de la documentación, sin embargo, aquí hay un resumen:

asegúrese de tener la dependencia configurada en /project/Build.scala

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

Agregue una configuración adecuada de la base de datos (reemplace la configuración H2 predeterminada) en /conf/application.conf:

(no elimine la codificación de la 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

en el mismo archivo, busque y asegúrese de que esta línea NO esté comentada:

ebean.default="models.*"

Eso es todo, reinicie su aplicación (o ejecútela en modo de desarrollo), luego creará un DDL y le pedirá que lo aplique.

biesior
fuente
¿Puedes actualizar la documentación también aquí github.com/playframework/playframework/blob/2.2.x/documentation/… para que todos puedan beneficiarse? ¡Gracias!
Lavixu
Otras cosas a considerar es asegurarse de que MySQL no se limite a conexiones de solo socket (Mac / Linux) y que localhostpueda necesitar ser reemplazado por 127.0.0.1. En términos specifict, utilizando MariaDB (una caída de Oracle-libre en el reemplazo para MySQL) desde MacPorts que tenía que comentar skip-networking en my.cnfy utilizar la dirección IP en lugar de localhosttener éxito Juego de conexión.
serón
¿Por qué agregó jdbc al comienzo de la URL de la base de datos?
BenMorganIO
@BenMorganIO porque necesitamos usar el controlador JDBC, tal sintaxis, nada más
biesior
Estoy confundido. ¿Cuál es el propósito de "jdbc: mysql:" en la URL? ¿Es "jdbc: mysql" el nombre de la base de datos?
Michael Lafayette
10

Estoy usando play 2.2.0 y solo tuve que agregar la siguiente línea a build.sbt en la carpeta raíz del proyecto.

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

Y jugar descarga automáticamente el controlador. Parece que Build.scala ya no es necesario para esto. Los cambios en application.conf deben aplicarse como han mencionado los comentaristas anteriores.

broma
fuente
Esto me acaba de salvar. Usando Play 2.10.3 y esta era la forma correcta de hacerlo.
Jack Slingerland
3
¡¡¡Gracias!!! Para las personas que necesitan instrucciones detalladas como yo, básicamente van a build.sbt y agregan esa línea alibraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
Dao Lam
1
Para personas como yo, no olviden detener el ./activator, y luego ejecutarlo nuevamente :)
Damir Olejar
8

La mayoría de los métodos para acceder a una base de datos mysql con los que me he encontrado no explican cómo establecer una conexión y recuperar datos desde el modelo. En mi aplicación, estoy usando mongoDB y una base de datos mysql externa. Así que así es como hice (el lado de mysql) las cosas:

  1. Para Play 2.3.3, en el archivo build.sbt agregue la línea específica de mysql en libraryDependencies:

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-java" % "5.1.27"
    )
  2. En el archivo /conf/application.conf agregue esto:

    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

    Puede reemplazar "myotherdb" por "predeterminado" en caso de que desee utilizar la base de datos predeterminada o con cualquier otro nombre que desee utilizar. Reemplace "xxx.xxx.xxx.xxx" con la dirección IP del servidor donde se encuentra su base de datos (en el caso de una base de datos externa) o localhost (o 127.0.0.1) para la base de datos local. Reemplace "NameOfOtherDB" con el nombre de la base de datos que desea utilizar, "MyOtherDbUSername" con su nombre de usuario de la base de datos y "MyOtherDbPass" con la contraseña de su base de datos.

  3. Dentro de su modelo (/app/models/MyModel.scala) agregue esto:

    val connection = DB.getConnection("myotherdb")
  4. Crea la sentencia, la consulta y ejecútala:

    val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val query = "SELECT * FROM myTableName"
    val resultset = statement.executeQuery(query)
  5. Luego, puede continuar con lo que quiera hacer con los datos recuperados. Por ejemplo:

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

    Donde "columnName" es el nombre de la columna / campo de la tabla de base de datos que desea recuperar.

Por último, pero no menos importante, me gustaría señalar que es posible que desee cerrar la conexión llamando a close ()

consuela
fuente
1
Tu ejemplo es muy útil. ¿Cómo se vería para Play Java?
lomse
6

Me quedé atascado con mi configuración de MySQL hasta que encontré esto.

Cosas más importantes tomadas de la respuesta de @biesior:

  • Agregue el conector MySQL / J en la dependencia del proyecto (que está adentro /project/Build.scala)
  • Después de agregar la dependencia, ejecute play dependenciespara resolver el conector MySQL / dependencia J recién agregado
  • Descomentar la línea de configuración predeterminada de ebean ebean.default="models.*"
  • Configure la base de datos MySQL correctamente con la codificación de caracteres adecuada 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

Me salvó el día.

ck1910
fuente
4

Para jugar 2.3.1 , sigue estos pasos.

1) Agregue el conector MySQL / J en la dependencia del proyecto (que está dentro de /project/build.sbt)

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

2) Descomente la línea de configuración predeterminada de ebean ebean.default = "modelos. *"

3) Configure la base de datos MySQL correctamente con la codificación de caracteres adecuada

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) La mayoría de Imp. Ejecute un comando de recarga en la consola.

trabajando
fuente
Esto funciona perfectamente bien para mí a nivel local. Pero cuando creo un paquete dist, subo el paquete a un servidor Ubuntu e intento iniciar la aplicación que obtengo java.sql.SQLException: No suitable driver found for mysql://....
Nick
intente poner su controlador mysql en classpath.
trabajando el
Lo agregué a libraryDependencies en mi build.sbt (que lo hizo funcionar localmente) y en el servidor lo instalé con sudo apt-get install mysql-client; sudo apt-get install libmysql-javaput export CLASSPATH=/usr/share/java/mysql-connector-java.jary también lo agregué /etc/environment(como se describe en help.ubuntu.com/community/JDBCAndMySQL ). Todavía no funciona.
Nick
4

Juega 2.4.3 y MYSQL 5.7.9

Pude hacer que esto funcionara juntando bits de información de todas las respuestas anteriores. Así que aquí hay otro, que es de esperar que esté más actualizado o sea útil para aquellos con un entorno similar.

Detalles del entorno: ( esto es lo que estoy usando )

  • Juega 2.4.3 esto viene con activator-1.3.7-minimal
  • JDK8, ya deberías tener esto porque no creo que esta versión del juego funcione con 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

Nota:

  • testSchema en la URL es el nombre de su base de datos, si está usando algo como MYSQL workbench , verá esto en la sección SCHEMAS. Llamé al mío testSchema. Otros pueden llamarlo algo como "myDatabase"
  • El puerto debe ser el puerto MYSQL. No es su puerto de aplicación. Pongo 3306el ejemplo porque suele ser el predeterminado para MYSQL.

build.sbt

Agregue esta línea a continuación a su archivo build.sbt. Esto debería ir después de la libraryDependencies ++= Seq()declaración.

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

Finalmente

  • ejecute este comando desde la raíz de su proyecto -> activator reload
  • reinicia tu aplicación
Kris Hollenbeck
fuente
1

Para reproducir un proyecto java usando SBT

Cambie libraryDependency a llok así en "build.sbt"

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

Ejecute su proyecto usando "activator run"

Play desactivará el conector jdbc requerido.

Anand Kumar
fuente
1

Tuve el mismo problema en el último marco de juego 2.4.x con el activador 1.3.6.

Estos son los pasos. Seguí los pasos descritos aquí https://www.playframework.com/documentation/2.4.x/JavaDatabase

Aquí está mi 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.*"]

Aquí está 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")

Este es el paso importante.

Después de configurar los pasos anteriores, vaya a la línea de comandos, detenga su activador y ejecute el comando activator run. En mi situación, seguía recibiendo el error unable to find mysql drivers. Después de ejecutar activator run, el activador descargaría los controladores de MySQL y resolvería las dependencias. Ese es el paso importante que resolvió mi problema.

Manjunath Reddy
fuente
1

Para mí, este trabajo, agregue esta línea a continuación en sus dependencias:

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

Aquí está el código:

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()
SwwapnilShirke
fuente