90 votes

Étapes à suivre pour utiliser la base de données MySQL avec Play framework 2.0

Je suis nouveau dans le cadre de Play. J'essaie de configurer une base de données MySQL comme source de données à utiliser avec Play Ebeans.

Pourriez-vous m'expliquer les étapes nécessaires à la configuration de MySQL avec le framework Play 2.0 (comme le téléchargement des pilotes, l'ajout de dépendances, etc.)

103voto

Carsten Points 7024

Regardez cette page de la documentation de Play. C'est écrit :

À l'exception de la base de données en mémoire h2, utile principalement en mode développement, Play 2.0 ne fournit aucun pilote de base de données. Par conséquent, pour le déployer en production, vous devrez ajouter votre pilote de base de données en tant que dépendance de l'application.

Par exemple, si vous utilisez MySQL5, vous devez ajouter une dépendance pour le connecteur :

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

SBT téléchargera le pilote pour vous. Vous devriez également consulter le site section sur la gestion des dépendances .

Pour vous connecter à MySQL, vous devrez également modifier certains paramètres dans votre fichier application.conf :

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

0 votes

Merci. Une fois cela fait, quels seraient les changements de configuration que je devrais faire dans le fichier application.conf ? (db.default.driver, db.default.url, etc)

0 votes

@Carsten, donner l'url sans guillemets échouera.

3 votes

Play framework 2.1.1 ici. Après avoir mis à jour le build.sbt, vous devez donner la commande 'update' dans le terminal de jeu.

94voto

biesior Points 29858

Comme l'a écrit Carsten, il est possible d'aller chercher la documentation, mais voici un résumé :

assurez-vous que vous avez configuré la dépendance dans /project/Build.scala

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

Ajouter une configuration correcte de la BD (remplacer la configuration H2 par défaut) dans /conf/application.conf :

(ne pas supprimer l'encodage de l'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

dans le même fichier et assurez-vous que cette ligne n'est PAS commentée :

ebean.default="models.*"

C'est tout, redémarrez votre application (ou exécutez-la en mode dev), puis elle créera une DDL et vous demandera de l'appliquer.

0 votes

Pouvez-vous s'il vous plaît mettre à jour la documentation ici aussi github.com/playframework/playframework/blob/2.2.x/documentation/ afin que tout le monde puisse en bénéficier ? Merci !

0 votes

Il faut également s'assurer que MySQL n'est pas limité aux connexions par socket uniquement (Mac/Linux) et que localhost peut devoir être remplacé par 127.0.0.1 . En termes spécifiques, l'utilisation de MariaDB (un remplacement de MySQL sans Oracle) de MacPorts, j'ai dû commenter skip-networking en my.cnf et utiliser l'adresse IP au lieu de localhost pour que Play se connecte avec succès.

0 votes

Pourquoi avez-vous ajouté jdbc au début de l'url de la base de données ?

10voto

jrook Points 130

J'utilise play 2.2.0 et j'ai juste dû ajouter la ligne suivante à build.sbt dans le dossier Root du projet.

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

Et le jeu télécharge automatiquement le pilote. Il semble que Build.scala ne soit plus nécessaire pour cela. Les modifications apportées à application.conf doivent être appliquées comme l'ont mentionné les commentateurs ci-dessus.

0 votes

Cela vient de me sauver. J'utilise Play 2.10.3 et c'est la façon correcte de procéder.

3 votes

Merci ! !! Pour les personnes qui ont besoin d'instructions détaillées comme moi, il suffit d'aller dans le fichier build.sbt et d'y ajouter la ligne suivante libraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")

1 votes

Pour les personnes comme moi, n'oubliez pas d'arrêter le ./activator, puis de le relancer :)

8voto

Nikolas Points 359

La plupart des méthodes d'accès à une base de données mysql que j'ai rencontrées n'expliquent pas comment établir une connexion et récupérer les données à partir du modèle. Dans mon application, j'utilise à la fois MongoDB et une base de données mysql externe. Voici donc comment j'ai fait (le côté mysql) des choses :

  1. Pour Play 2.3.3, dans le fichier build.sbt, ajoutez la ligne spécifique à mysql dans les libraryDependencies :

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-java" % "5.1.27"
    )
  2. Dans le fichier /conf/application.conf, ajoutez ceci :

    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

    Vous pouvez remplacer "myotherdb" par "default" si vous souhaitez utiliser la base de données par défaut ou par tout autre nom que vous souhaitez utiliser. Remplacez "xxx.xxx.xxx.xxx" par l'adresse IP du serveur où se trouve votre base de données (dans le cas d'une base de données externe) ou localhost (ou 127.0.0.1) pour une base de données locale. Remplacez "NameOfOtherDB" par le nom de la base de données que vous souhaitez utiliser, "MyOtherDbUSername" par le nom d'utilisateur de votre base de données et "MyOtherDbPass" par le mot de passe de votre base de données.

  3. Dans votre modèle (/app/models/MyModel.scala), ajoutez ceci :

    val connection = DB.getConnection("myotherdb")
  4. Créez la déclaration, la requête et exécutez-la :

    val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val query = "SELECT * FROM myTableName"
    val resultset = statement.executeQuery(query)
  5. Vous pouvez ensuite poursuivre ce que vous voulez faire avec les données récupérées. Par exemple :

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

    Où "columnName" est le nom de la colonne/du champ de la table de la BD que vous voulez récupérer.

Enfin, je voudrais noter que vous pourriez vouloir fermer la connexion en appelant fermer()

1 votes

Votre exemple est très utile. A quoi cela ressemblerait-il pour Play Java ?

7voto

ck1910 Points 71

J'étais coincé avec ma configuration MySQL jusqu'à ce que je trouve ceci.

Les choses les plus importantes sont tirées de la réponse de @biesior :

  • Ajouter MySQL connector/J dans la dépendance du projet (qui se trouve dans /project/Build.scala )
  • Après avoir ajouté la dépendance, exécutez play dependencies pour résoudre la dépendance MySQL connector/J nouvellement ajoutée
  • Décommenter la ligne de configuration par défaut d'ebean ebean.default="models.*"
  • Configurer correctement la base de données MySQL avec le codage de caractères approprié 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

Ça a sauvé ma journée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X