Есть ли простой способ использовать пул соединений БД с Slick от scala?
Пул соединений в slick?
Ответы (4)
Я использую Apache Commons DBCP
для этого. По сути, вы просто создаете DataSource
, который инкапсулирует детали пула, и передаете этот DataSource
Slick:
import org.apache.commons.dbcp.BasicDataSource
val dataSource: DataSource = {
val ds = new BasicDataSource
ds.setDriverClassName("org.hsqldb.jdbc.JDBCDriver")
ds.setUsername("SA")
ds.setPassword("")
ds.setMaxActive(20);
ds.setMaxIdle(10);
ds.setInitialSize(10);
ds.setValidationQuery("SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS")
new java.io.File("target").mkdirs // ensure that folder for database exists
ds.setUrl("jdbc:hsqldb:file:target/db/db")
ds
}
// test the data source validity
dataSource.getConnection().close()
// get the Slick database that uses the pooled connection
val database = Database.forDataSource(dataSource)
В этом примере используется HSQLDB, но его можно легко адаптировать к любой другой базе данных.
Полный пример находится здесь ( вы можете клонировать проект и запустить sbt run
в каталоге lift/, чтобы увидеть, как он работает).
Для завершения я написал сообщение в блоге об этом:
http://fernandezpablo85.github.io/2013/04/07/slick_connection_pooling.html
В Play 2.4 теперь используется HikariCP, который выглядит очень красиво: https://brettwooldridge.github.io/HikariCP/. https://www.playframework.com/documentation/2.4.x/SettingsJDBC
Похоже, что более поздняя версия настроенных соединений игрового пула - см. http://www.playframework.com/documentation/2.0.1/SettingsJDBC
Database.forDataSource(ds: DataSource)
. Вы можете использовать методыcreateSession
илиwithSession
из объекта базы данных. Источник данных — это тот, который вы запрашиваете из библиотеки пула. - person EECOLOR   schedule 21.03.2013