Piszę aplikację internetową Scala przy użyciu Play Framework 2.1.1 przy użyciu lokalnej bazy danych Postgres wraz z Slick 1.0.0, a ja wpadam w to, co wydaje się być tutaj sprzecznością.Dlaczego akcja akcji kończy się niepowodzeniem z "nie znaleziono odpowiedniego sterownika" w wersjach Slick i PostgreSQL?
Jest to błąd biegnę do:
[SQLException: No suitable driver found for postgres://user:[email protected]:5432/postgres]
56
57 def instance = Action {
58 Database.forURL("postgres://user:[email protected]:5432/postgres", driver = "org.postgresql.Driver") withSession {
59 val q = Retailer.map(_.name)
60 Ok(views.html.instance(q.list, newRForm))
61 }
62 }
63
Gdzie user
i password
są odpowiednio username
i password
bazy danych PostgreSQL.
W java error (No suitable driver found) znalazłem:
- Musisz załadować sterownika gdzieś korzystając
Class.forName("org.postgresql.Driver");
- Musisz pliku jar kierowcy PostgreSQL w ścieżce klasy twojego programu.
W Application.scala
Mam następujący fragment kodu:
{
println(ConfigFactory.load().getString("db.default.url"))
println(Class.forName("org.postgresql.Driver"))
}
ponowne uruchomienie play compile
wyniki w:
(Server started, use Ctrl+D to stop and go back to the console...)
[info] play - database [default] connected at jdbc:postgresql://localhost:5432/postgres
[info] play - Application started (Dev)
postgres://user:[email protected]:5432/postgres
class org.postgresql.Driver
[error] application -
! @6ei1nhkop - Internal server error, for (GET) [/instance] ->
play.api.Application$$anon$1: Execution exception[[SQLException: No suitable driver found for jdbc:postgresql://user:[email protected]:5432/postgres]]
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1]
at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:326) [play_2.10.jar:2.1.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:324) [play_2.10.jar:2.1.1]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
java.sql.SQLException: No suitable driver found for jdbc:postgresql://user:[email protected]:5432/postgres
at java.sql.DriverManager.getConnection(Unknown Source) ~[na:1.7.0_21]
at java.sql.DriverManager.getConnection(Unknown Source) ~[na:1.7.0_21]
at scala.slick.session.Database$$anon$2.createConnection(Database.scala:105) ~[slick_2.10-1.0.0.jar:1.0.0]
at scala.slick.session.BaseSession.conn$lzycompute(Session.scala:207) ~[slick_2.10-1.0.0.jar:1.0.0]
at scala.slick.session.BaseSession.conn(Session.scala:207) ~[slick_2.10-1.0.0.jar:1.0.0]
at scala.slick.session.BaseSession.close(Session.scala:221) ~[slick_2.10-1.0.0.jar:1.0.0]
Potem biegnę play dependencies
i postgres .jar został rozwiązany!
Here are the resolved dependencies of your application:
+--------------------------------------------------------+--------------------------------------------------------+-----------------------------------+
| ←[32mpostgresql:postgresql:9.1-901-1.jdbc4←[0m | ←[37mats:ats_2.10:1.0-SNAPSHOT←[0m | ←[37mAs postgresql-9.1-901-1.jdbc4.jar←[0m |
+--------------------------------------------------------+--------------------------------------------------------+-----------------------------------+
Dlaczego nie można znaleźć odpowiedniego sterownika?
conf/application.conf
# Database configuration
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgres://user:[email protected]:5432/postgres"
db.default.user=user
db.default.password=password
projekt/Build.scala
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
val appName = "ats"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
// Add your project dependencies here,
jdbc,
"com.typesafe.slick" %% "slick" % "1.0.0",
"postgresql" % "postgresql" % "9.1-901-1.jdbc4"
)
val main = play.Project(appName, appVersion, appDependencies).settings(
// Add your own project settings here
)
Mam też postgresql-9.2-1002.jdbc4.jar
i slick_2.10-1.0.1-RC1.jar
w moim pliku /lib
, a moja lokalna wersja PostgreSQL od robienia a SELECT version();
jest 9.2.4 Postgres sterownika wydaje się być RozwiĘ ... zywanie z wersjĘ ... 9.1 .jar i kiedy skomentuj zależność aplikacji, aby /lib
było uwzglę dnione samodzielnie, /lib
nie wydaje się być w CLASSPATH Play.
Wiem, że adres URL Postgres jest poprawny i mogę połączyć się z moją bazą danych po uruchomieniu mojej aplikacji.
Hum. forURL vs forDataSource jest jak sterownik kontra źródło danych w jdbc [http://fernandezpablo85.github.io/2013/04/07/slick_connection_pooling.html] – Meredith