Шаги, необходимые для использования базы данных MySQL с платформой Play 2.0


91

Я новичок в Play framework. Я пытаюсь настроить базу данных 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' в
игровом

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 в начало URL-адреса базы данных?
BenMorganIO

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

Я в замешательстве. Какова цель «jdbc: mysql:» в URL-адресе? Является ли "jdbc: mysql" именем базы данных?
Майкл Лафайет

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
Для таких, как я, не забывайте останавливать ./activator, а затем запускать его снова :)
Дамир Олежар

8

Большинство методов доступа к базе данных mysql, с которыми я столкнулся, не объясняют, как установить соединение и получить данные из модели. В своем приложении я использую как mongoDB, так и внешнюю базу данных mysql. Итак, вот как я поступал (со стороны mysql):

  1. Для Play 2.3.3 в файле build.sbt добавьте строку, специфичную для mysql, в libraryDependencies:

    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» 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» - это имя столбца / поля таблицы БД, которое вы хотите получить.

И последнее, но не менее важное: я хотел бы отметить, что вы можете закрыть соединение, вызвав close ()


1
Ваш пример очень полезен. Как бы это выглядело для Play Java?
lomse

6

Я застрял в моей конфигурации MySQL, пока не нашел это.

Самые важные вещи взяты из ответа @biesior:

  • Добавить соединитель MySQL / J в зависимость проекта (которая находится внутри /project/Build.scala)
  • После добавления зависимости запустите, play dependenciesчтобы разрешить недавно добавленную зависимость MySQL Connector / 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) Мост Имп. Выполните команду перезагрузки в консоли.


Это прекрасно работает для меня локально. Но когда я создаю пакет dist, загружаю его на сервер Ubuntu и пытаюсь запустить полученное мной приложение java.sql.SQLException: No suitable driver found for mysql://....
Ник

попробуйте поместить свой драйвер mysql в путь к классам.
рабочее место

Я добавил его в 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.