Slick не может подключиться к базе данных mssql - PullRequest
0 голосов
/ 21 ноября 2018

Я хотел бы использовать Slick (3.2.3) для подключения к базе данных MSSQL.

В настоящее время мой проект выглядит следующим образом.

В application.conf у меня есть

somedbname = {
  driver = "slick.jdbc.SQLServerProfile$"
  db {
    host = "somehost"
    port = "someport"
    databaseName = "Recupel.Datawarehouse"
    url = "jdbc:sqlserver://"${somedbname.db.host}":"${somedbname.db.port}";databaseName="${somedbname.db.databaseName}";"
    user = "someuser"
    password = "somepassword"
  }
}

"somehost" выглядит как XX.X.XX.XX, где X - это числа.

My build.sbt содержит

name := "test-slick"

version := "0.1"

scalaVersion in ThisBuild := "2.12.7"

libraryDependencies ++= Seq(
  "com.typesafe.slick" %% "slick" % "3.2.3",
  "com.typesafe.slick" %% "slick-hikaricp" % "3.2.3",
  "org.slf4j" % "slf4j-nop" % "1.6.4",
  "com.microsoft.sqlserver" % "mssql-jdbc" % "7.0.0.jre10"
)

Файл с "main »объект содержит

import slick.basic.DatabaseConfig
import slick.jdbc.JdbcProfile
import slick.jdbc.SQLServerProfile.api._

import scala.concurrent.Await
import scala.concurrent.duration._


  val dbConfig: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig("somedbname")

  val db: JdbcProfile#Backend#Database = dbConfig.db

  def main(args: Array[String]): Unit = {
    try {

      val future = db.run(sql"SELECT * FROM somettable".as[(Int, String, String, String, String,
        String, String, String, String, String, String, String)])

      println(Await.result(future, 10.seconds))

    } finally {
      db.close()
    }


  }

}

Этого, согласно всей документации, которую я смог найти, должно быть достаточно для подключения к базе данных.Однако, когда я запускаю это, я получаю

[error] (run-main-0) java.sql.SQLTransientConnectionException: somedbname.db - Connection is not available, request timed out after 1004ms.
[error] java.sql.SQLTransientConnectionException: somedbname.db - Connection is not available, request timed out after 1004ms.
[error]         at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548)
[error]         at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
[error]         at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145)
[error]         at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:83)
[error]         at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:14)
[error]         at slick.jdbc.JdbcBackend$BaseSession.<init>(JdbcBackend.scala:453)
[error]         at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:46)
[error]         at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:37)
[error]         at slick.basic.BasicBackend$DatabaseDef.acquireSession(BasicBackend.scala:249)
[error]         at slick.basic.BasicBackend$DatabaseDef.acquireSession$(BasicBackend.scala:248)
[error]         at slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:37)
[error]         at slick.basic.BasicBackend$DatabaseDef$$anon$2.run(BasicBackend.scala:274)
[error]         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
[error]         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[error]         at java.base/java.lang.Thread.run(Thread.java:844)
[error] Nonzero exit code: 1

Возможно, связанный и также раздражающий, когда я запускаю этот код второй (и последующий) раз, вместо этого я получаю следующую ошибку:

Failed to get driver instance for jdbcUrl=jdbc:sqlserver://[...]

, что заставляет меня убивать и перезагружать sbt каждый раз.

Что я делаю не так?Стоит отметить: я могу подключиться к базе данных с теми же учетными данными из программного обеспечения, как Валентина.

1 Ответ

0 голосов
/ 21 ноября 2018

По предложению @MarkRotteveel и следуя этой ссылке , я нашел решение.

Сначала я явно установил драйвер, добавив строку

driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"

в словаре БД после password = "somepassword".

Во-вторых, время ожидания по умолчанию (через одну секунду) представляется слишком коротким для моих целей, и поэтому я добавил строку connectionTimeout = "30 seconds" после предыдущего driver строка, все еще в словаре db.

Теперь это работает.

...