Is there an easy way to use a DB connection pool with scala's Slick?
I use Apache Commons DBCP
for this. Basically, you simply create a DataSource
, that encapsulates the pooling details, and pass that DataSource
to 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)
This example uses HSQLDB, but can be easily adapted to any other database.
Full example is here (you can clone the project, and run sbt run
in lift/ directory to see it working).