Как настроить HikariCP для Slick 3.0.0 RC1 на Typesafe conf

У меня есть приложение Play, основанное на шаблоне Typesafe play-scala (Play Scala Seed), и попытался добавить Slick 3.0.0 в проект и подключиться к базе данных PostgreSQL.

Сначала я добавил зависимости к build.sbt:

libraryDependencies ++= Seq(
    "com.typesafe.slick" %% "slick" % "3.0.0-RC1",
    "postgresql" % "postgresql" % "9.1-901.jdbc4"
)

Затем добавил конфигурацию базы данных на application.conf:

brDb = {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  url = "jdbc:postgresql://localhost:5432/test"
  user = "postgres"
  password = "postgres"
  numThreads = 10
}

Обратите внимание, что я не отключил пул явно, поэтому он включен по умолчанию, и я попытаюсь использовать HikariCP, потому что, начиная с Slick 3.0.0 RC1, Поддержка HikariCP существует, и объединение с ее использованием включено по умолчанию.

И в моем объекте DAO попытался получить соединение с базой данных следующим образом:

Database.forConfig("brDb")

Когда я запускаю приложение с помощью activator run, я получаю эту ошибку:

RuntimeException: java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariConfig

Затем я попытался добавить HikariCP в качестве зависимости в build.sbt:

libraryDependencies ++= Seq(
    // ...
    "com.zaxxer" % "HikariCP" % "2.3.3",
    // ...
)

Очистил и перекомпилировал приложение, используя activator clean compile, и снова запустил его, но получаю другую ошибку:

RuntimeException: java.lang.UnsupportedClassVersionError: com/zaxxer/hikari/HikariConfig

Я думаю, что мне не хватает какой-то конфигурации, но я не уверен и не нашел больше информации об этом. Как настроить конфигурацию, чтобы пул соединений работал?


person Guillermo Gutiérrez    schedule 24.03.2015    source источник
comment
Так что я не понимаю, почему HikariCP не включен в качестве зависимости от новой гладкой версии, если она явно зависит от нее?   -  person evermean    schedule 26.03.2015
comment
@evermean Я не уверен. Похоже, что зависимость находится в файле сборки для Slick: github.com/slick/slick/blob/3.0.0-RC1/project/Build.scala#L36 (я новичок в Scala и Play, поэтому, возможно, я что-то упустил и зависимость не вытягивается по умолчанию)   -  person Guillermo Gutiérrez    schedule 27.03.2015


Ответы (2)


Эта ошибка означает, что пакет HikariCP скомпилирован для более новой JRE, чем та, на которой вы работаете. И на самом деле, если вы посмотрите на домашнюю страницу, вы увидите, что вы используете следующую версию:

Артефакт Java 8 maven:

<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>2.3.5</version>
  <scope>compile</scope>
</dependency>

Я полагаю, вы работаете на Java 7. Для этого добавьте следующее в свой build.sbt:

libraryDependencies ++= Seq(
  "com.zaxxer" % "HikariCP-java6" % "2.3.3",
)
person Carsten    schedule 24.03.2015
comment
В этом и была проблема. Теперь у меня есть еще одно исключение (тайм-аут соединения) :( но это будет другой вопрос. Большое спасибо. - person Guillermo Gutiérrez; 24.03.2015

Кстати, я обнаружил, что структура конфигурации, которую вы указали выше, на самом деле не работает с Slick 3.0.0. Мне помогло указать конфигурацию базы данных, как описано в документации http://slick.typesafe.com/doc/3.0.0/database.html#using-typesafe-config, иначе Slick примет некоторые значения по умолчанию для конфигурации. Я в основном говорю о поле «свойства».

Итак, что-то вроде этого должно работать:

mydb = {
  dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
  properties = {
    serverName = "postgresdb"
    portNumber = "5432"
    databaseName = "mydb"
    user = "myuser"
    password = "secret"
  }
  numThreads = 10
}
person Bogdan    schedule 22.05.2015
comment
какой ключ для установки таймаута на hikaricp? нигде не могу найти - person pedrorijo91; 24.12.2015
comment
connectionTimeout на верхнем уровне (т. е. там, где вы устанавливаете numThreads). - person schernichkin; 18.02.2016