MySQL veritabanını Play framework 2.0 ile kullanmak için gereken adımlar


91

Play framework'te yeniyim. MySQL veritabanını Play Ebeans ile kullanılacak bir veri kaynağı olarak yapılandırmaya çalışıyorum.

MySQL'i Play 2.0 çerçevesiyle yapılandırmak için gereken adımları açıklayabilir misiniz (sürücü indirme, bağımlılık ekleme vb.).

Yanıtlar:


102

Play'in belgelerinden bu sayfaya bakın . Diyor ki:

Çoğunlukla geliştirme modunda yararlı olan h2 bellek içi veritabanı dışında, Play 2.0 herhangi bir veritabanı sürücüsü sağlamaz. Sonuç olarak, üretimde dağıtmak için veritabanı sürücünüzü bir uygulama bağımlılığı olarak eklemeniz gerekir.

Örneğin, MySQL5 kullanıyorsanız, bağlayıcı için bir bağımlılık eklemeniz gerekir:

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

SBT sürücüyü sizin için indirecektir. Bağımlılıkları yönetme bölümüne de bakmalısınız .

MySQL'e bağlanmak için, aşağıdaki bazı ayarları da değiştirmeniz gerekecektir application.conf:

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

Teşekkürler. Bu yapıldıktan sonra, application.conf dosyasında yapmam gereken yapılandırma değişiklikleri nelerdir? (db.default.driver, db.default.url, vb.)
Veera

@Carsten, teklifsiz url vermek başarısız olur
biesior

3
2.1.1 çerçevesini burada oynayın. build.sbt'yi güncelledikten sonra, oyun terminalinde 'update' komutunu vermelisiniz
Kinjal Dixit

9
Günümüzde, projenin kök düzeyinde build.sbt'ye eklenmelidir, örneğin: libraryDependencies ++ = Seq (javaJdbc, javaEbean, "mysql"% "mysql-connector-java"% "5.1.28", önbellek)
Adrian Scott

Çalıştırdığınızda, belgelerin iş parçacığı havuzu bölümünü de okumalı ve yapılandırmanızı buna göre güncellemelisiniz çünkü jdbc bir engelleme API'sidir. playframework.com/documentation/2.2.x/ThreadPools
johanandren

94

Carsten'in yazdığı gibi, belgelerden alınabilir, ancak işte bir özet:

bağımlılığı yapılandırdığınızdan emin olun /project/Build.scala

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

Uygun bir DB yapılandırması ekleyin (varsayılan H2 yapılandırmasını değiştirin) /conf/application.conf:

(URL’den kodlamayı kaldırmayın):

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

aynı dosyada bu satırın yorum yapmadığından emin olun:

ebean.default="models.*"

Hepsi bu, uygulamanızı yeniden başlatın (veya geliştirme modunda çalıştırın), ardından bir DDL oluşturacak ve sizden uygulamanızı isteyecektir.


Herkesin yararlanabilmesi için lütfen dokümantasyonu github.com/playframework/playframework/blob/2.2.x/documentation/… adresinden de güncelleyebilir misiniz ? Teşekkürler!
Lavixu

Dikkate alınması gereken diğer şeyler, MySQL'in yalnızca soket bağlantılarıyla (Mac / Linux) sınırlı olmadığından ve bununla localhostdeğiştirilmesi gerekebileceğinden emin olmaktır 127.0.0.1. Kullanarak specifict açısından, mariadb MacPorts (MySQL için değişiklik olarak Oracle içermeyen damla) Ben dışarı yorumlamak zorunda -atlamak ağ içinde my.cnfve kullanımı IP adresini yerine localhostbaşarıyla bağlantı oyna olması.
seron

Neden db url'nin başına jdbc eklediniz?
BenMorganIO

@BenMorganIO çünkü JDBC sürücüsü kullanmamız gerekiyor, böyle bir sözdizimi, başka bir şey yok
biesior

Kafam karıştı. URL'deki "jdbc: mysql:" ifadesinin amacı nedir? Veritabanının adı "jdbc: mysql" midir?
Michael Lafayette

10

Play 2.2.0 kullanıyorum ve projenin kök klasöründeki build.sbt'ye aşağıdaki satırı eklemem gerekiyordu.

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

Ve oyun, sürücüyü otomatik olarak indirir. Görünüşe göre Build.scala artık bunun için gerekli değil. Application.conf dosyasındaki değişiklikler, yukarıdaki yorumcuların belirttiği gibi uygulanmalıdır.


Bu beni kurtardı. Play 2.10.3'ü kullanmak ve bunu yapmanın doğru yolu buydu.
Jack Slingerland

3
Teşekkür ederim!!! Benim gibi ayrıntılı talimatlar ihtiyacı olan insanlar için, temelde build.sbt gidip o satırı ekleyinlibraryDependencies ++= Seq(jdbc,anorm,cache,"mysql" % "mysql-connector-java" % "5.1.27")
Dao Lam

1
Benim gibi insanlar için ./activator'ı durdurup tekrar çalıştırmayı unutmayın :)
Damir Olejar

8

Karşılaştığım bir mysql veritabanına erişme yöntemlerinin çoğu, Model içinden nasıl bağlantı kurulacağını ve verilerin nasıl alınacağını açıklamıyor. Uygulamamda hem mongoDB hem de harici bir mysql veritabanı kullanıyorum. İşte işleri nasıl yaptım (mysql tarafı):

  1. Play 2.3.3 için, build.sbt dosyasında libraryDependencies: mysql'e özgü satırı ekleyin:

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-java" % "5.1.27"
    )
    
  2. /Conf/application.conf dosyasına şunu ekleyin:

    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
    

    Varsayılan veritabanını veya kullanmak istediğiniz başka bir ad kullanmak istemeniz durumunda "myotherdb" yi "varsayılan" olarak değiştirebilirsiniz. "Xxx.xxx.xxx.xxx" yerine veritabanınızın bulunduğu sunucunun IP adresini (harici bir veritabanı olması durumunda) veya yerel veritabanı için localhost (veya 127.0.0.1) ile değiştirin. "NameOfOtherDB" yerine kullanmak istediğiniz veritabanının adını, "MyOtherDbUSername" yerine veritabanı kullanıcı adınızı ve "MyOtherDbPass" yerine veritabanı parolanızı yazın.

  3. Modelinizin içine (/app/models/MyModel.scala) şunu ekleyin:

    val connection = DB.getConnection("myotherdb")
    
  4. İfadeyi, sorguyu oluşturun ve çalıştırın:

    val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val query = "SELECT * FROM myTableName"
    val resultset = statement.executeQuery(query)
    
  5. Ardından, alınan verilerle yapmak istediğiniz her şeye devam edebilirsiniz. Örneğin:

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

    Burada "columnName", almak istediğiniz DB tablosu sütununun / alanının adıdır.

Son olarak, close () ' yı arayarak bağlantıyı kapatmak isteyebileceğinizi belirtmek isterim.


1
Örneğiniz çok faydalı. Play Java için nasıl görünürdü?
lomse

6

Bunu bulana kadar MySQL konfigürasyonuma takılı kaldım.

@Biesior cevabından alınan en önemli şeyler:

  • Projenin bağımlılığına MySQL bağlayıcısı / J ekleyin (içeride /project/Build.scala)
  • Bağımlılık ekledikten sonra, play dependenciesyeni eklenen MySQL bağlayıcısını / J bağımlılığını çözmek için çalıştırın
  • Varsayılan ebean yapılandırma satırının açıklamasını kaldır ebean.default="models.*"
  • MySQL veritabanını doğru karakter kodlamasıyla doğru şekilde yapılandırın 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

Günümü kurtardı.


4

İçin oyun 2.3.1 şu adımları izleyin.

1) Projenin bağımlılığına MySQL bağlayıcısı / J ekleyin (/project/build.sbt içinde)

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

2) Varsayılan ebean yapılandırma satırı ebean.default = "modeller. *"

3) MySQL veritabanını uygun karakter kodlamasıyla doğru şekilde yapılandırın

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) En Çok İmp. Konsolda bir yeniden yükleme komutu çalıştırın .


Bu benim için yerel olarak gayet iyi çalışıyor. Ama bir dist paketi oluşturduğumda, paketi bir Ubuntu sunucusuna yükleyin ve aldığım uygulamayı başlatmayı deneyin java.sql.SQLException: No suitable driver found for mysql://....
Nick

mysql sürücünüzü sınıf yoluna koymayı deneyin.
çalışıyor

Bunu, build.sbt dosyamdaki (yerel olarak çalışmasını sağlayan) libraryDependencies ve sudo apt-get install mysql-client; sudo apt-get install libmysql-javaput ile yüklediğim sunucuya export CLASSPATH=/usr/share/java/mysql-connector-java.jarekledim ve /etc/environment( help.ubuntu.com/community/JDBCAndMySQL'de açıklandığı gibi ) ekledim . Hala çalışmıyor.
Nick

4

2.4.3 ve MYSQL 5.7.9 oynayın

Önceki yanıtların tümünden bilgi parçalarını bir araya getirerek bunu çalıştırmayı başardım. Öyleyse, umarım daha güncel veya benzer bir ortama sahip olanlar için yararlı olan bir tane daha.

Ortam Ayrıntıları: ( kullandığım şey bu )

  • 2.4.3 oyna, bununla birlikte aktivatör-1.3.7-minimal
  • JDK8, oyunun bu sürümünün JDK7 ile çalıştığını düşünmediğim için buna zaten sahip olmalısınız
  • 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

Not:

  • MYSQL tezgahı gibi bir şey kullanıyorsanız, URL'deki testSchema veritabanı adınızdır bölümünde listelendiğini göreceksiniz. Benim testSchema'yı aradım. Diğerleri buna "veritabanım" gibi bir şey diyebilir
  • Bağlantı noktası, MYSQL bağlantı noktası olmalıdır. Uygulama bağlantı noktanız değil. 3306Örneği koydum çünkü bu genellikle MYSQL için varsayılan değerdir.

build.sbt

Aşağıdaki satırı build.sbt dosyanıza ekleyin. Bu, libraryDependencies ++= Seq()beyannamenin ardından gitmelidir .

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

En sonunda

  • bu komutu proje kökünüzden çalıştırın -> activator reload
  • uygulamanızı yeniden başlatın

1

SBT kullanarak java projesi oynamak için

LibraryDependency'yi "build.sbt" de bu şekilde llok olacak şekilde değiştirin

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

Projenizi "aktivatör çalıştırma" kullanarak çalıştırın

Oynatma, gerekli jdbc konektörünü indirecektir.


1

1.3.6 aktivatörlü son oyun çerçevesi 2.4.x'te aynı sorunu yaşadım.

İşte adımlar. Burada açıklanan adımları izledim https://www.playframework.com/documentation/2.4.x/JavaDatabase

İşte benim 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.*"]

Burada 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")

İşte önemli adım.

Yukarıdaki adımları yapılandırdıktan sonra komut satırına gidin, aktivatörünüzü durdurun ve komutu çalıştırın activator run. Benim durumumda, hatayı almaya devam ediyordum unable to find mysql drivers. Çalıştırdıktan sonra activator run, aktivatör aslında MySQL sürücülerini indirecek ve bağımlılıkları çözecektir. Sorunumu çözen önemli adım budur.


1

Benim için bu çalışma, aşağıdaki satırı bağımlılıklarınıza ekleyin:

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

İşte kod:

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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.