Кроки, необхідні для використання бази даних MySQL з Play framework 2.0


91

Я новачок у програмі Play. Я намагаюся налаштувати базу даних MySQL як джерело даних для використання з Play Ebeans.

Будь ласка, поясніть, будь ласка, кроки, необхідні для налаштування MySQL з фреймворком Play 2.0 (наприклад, завантаження драйверів, додавання залежності тощо).

Відповіді:


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
play framework 2.1.1 тут. після оновлення build.sbt, вам слід дати команду 'update' в терміналі відтворення
Kinjal Dixit

9
Сьогодні його слід додати в build.sbt на кореневому рівні проекту, наприклад: libraryDependencies ++ = Seq (javaJdbc, javaEbean, "mysql"% "mysql-connector-java"% "5.1.28", cache)
Адріан Скотт

Коли він працює, вам слід також прочитати розділ пулу потоків у документах та відповідно оновити конфігурацію, оскільки jdbc є блокуючим API. playframework.com/documentation/2.2.x/ThreadPools
johanandren

94

Як писав Карстен, це можна отримати з документації, проте ось короткий зміст:

переконайтесь, що у вас налаштована залежність в /project/Build.scala

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

Додайте належну конфігурацію БД (замініть конфігурацію 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 не обмежується лише підключеннями до сокетів (Mac / Linux) і, localhostможливо, доведеться їх замінити 127.0.0.1. У specifict умовах, використовуючи MariaDB (Оракул вільного падіння в заміні для MySQL) від MacPorts мені довелося закомментировать скіп мережі в my.cnfі використовувати IP - адреса замість localhostмати Play успішно підключитися.
seron

Чому ви додали jdbc на початок db-адреси?
BenMorganIO

@BenMorganIO, тому що нам потрібно використовувати драйвер JDBC, такий синтаксис, нічого більше
biesior

Я збентежений. Яка мета "jdbc: mysql:" у URL-адресі? Чи є "jdbc: mysql" назвою бази даних?
Michael Lafayette

10

Я використовую play 2.2.0, і мені просто довелося додати наступний рядок до build.sbt в кореневій папці проекту.

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

І гра автоматично завантажує драйвер. Здається, Build.scala для цього більше не потрібен. Зміни до application.conf слід застосовувати, як згадували вищезазначені коментатори.


Це мене просто врятувало. Використовуючи Play 2.10.3, і це був правильний спосіб зробити це.
Джек Слінгерланд

3
Дякую!!! Для людей, яким потрібні докладні інструкції, такі як я, ви в основному переходите на build.sbt і додаєте цей рядок доlibraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
Dao Lam

1
Для таких людей, як я, не забудьте зупинити активатор ./, а потім запустити його знову :)
Дамір Олеяр

8

Більшість методів доступу до бази даних mysql, з якими я стикався, не пояснюють, як встановити підключення та отримати дані з Моделі. У своїй програмі я використовую як mongoDB, так і зовнішню базу даних mysql. Отже, ось як я робив (сторону mysql):

  1. Для Play 2.3.3 у файл build.sbt додайте рядок 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" на "за замовчуванням", якщо ви хочете використовувати базу даних за замовчуванням або на будь-яке інше ім'я, яке ви хочете використовувати. Замініть "xxx.xxx.xxx.xxx" на IP-адресу сервера, де знаходиться ваша база даних (у випадку зовнішньої бази даних), або localhost (або 127.0.0.1) для локальної бази даних. Замініть "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:

  • Додайте з'єднувач MySQL / J у залежність від проекту (який знаходиться всередині /project/Build.scala)
  • Після додавання залежності запустіть, 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) Додайте з'єднувач MySQL / J у залежність від проекту (який знаходиться всередині /project/build.sbt)

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) Більшість Imp. Запустіть команду перезавантаження в консолі.


Місцево це все чудово працює для мене. Але коли я створюю пакунок dist, завантажую пакет на сервер Ubuntu і намагаюся запустити отриману програму java.sql.SQLException: No suitable driver found for mysql://....
Нік

спробуйте помістити ваш драйвер mysql у classpath.
працює

Я додав його до libraryDependencies у своєму build.sbt (що змусило його працювати локально) та на сервері, який я встановив разом із 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 ). Це все ще не працює.
Нік

4

Грати 2.4.3 & MYSQL 5.7.9

Я зміг отримати цю роботу, склавши шматочки інформації з усіх попередніх відповідей. Тож ось ще один, який, сподіваємось, є більш сучасним або корисним для тих, хто має подібне середовище.

Деталі навколишнього середовища: ( це те, що я використовую )

  • Грати 2.4.3 це поставляється з активатором-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

Примітка:

  • testSchema в URL-адресі - це назва вашої бази даних, якщо ви використовуєте щось на зразок робочого середовища MYSQL, ви побачите це у списку в розділі SCHEMAS. Я зателефонував до мого testSchema. Інші можуть називати це як "myDatabase"
  • Портом повинен бути порт MYSQL. Не ваш порт програми. Я навів 3306приклад, оскільки це, як правило, за замовчуванням для MYSQL.

build.sbt

Додайте цей рядок нижче до свого файлу build.sbt. Це має йти після libraryDependencies ++= Seq()декларації.

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

Нарешті

  • запустіть цю команду з кореня вашого проекту -> activator reload
  • перезапустіть свою програму

1

Для відтворення Java-проекту за допомогою SBT

Змініть libraryDependency на llok, як це в "build.sbt"

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

Запустіть свій проект за допомогою "активатора"

Відтворення знизить необхідний роз'єм jdbc.


1

У мене була така ж проблема в останній програмі ігор 2.4.x з активатором 1.3.6.

Ось кроки. Я дотримувався кроків, описаних тут 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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.