2015-03-24 4 views
8

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

Сначала я добавил зависимости в 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 support exists and pooling using it is enabled by default.

И в моем объекте 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

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

+0

Так что я не понимаю, почему не HikariCP стянут по зависимости от новой версии гладкой, если она, очевидно, зависит от него? – evermean

+0

@evermean Я не уверен. Кажется, что зависимость находится в файле сборки для Slick: https://github.com/slick/slick/blob/3.0.0-RC1/project/Build.scala#L36 (я новичок в Scala и Play, так что, возможно, я что-то пропустил, и зависимость не потянулась по умолчанию) –

ответ

8

Эта ошибка означает, что пакет HikariCP скомпилирован для JRE более нового, чем тот, на котором вы снова работаете. И в самом деле, если вы look at the homepage, вы увидите, что версия, которую вы используете это:

Java 8 maven artifact:

<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", 
) 
+0

В этом и была проблема. Теперь у меня есть другое исключение (время ожидания соединения) :(но это будет еще один вопрос. Большое спасибо. –

4

Btw, я выяснил, что структура конфигурации, указанная выше, на самом деле не работает с 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 
} 
+0

Какой ключ для установки тайм-аута на hikaricp? Не может найти его где-либо – pedrorijo91

+0

connectionTimeout на верхнем уровне (т.е. там, где вы устанавливаете numThreads) , – schernichkin