2013-03-20 2 views
25

Esiste un modo semplice per utilizzare un pool di connessione DB con scala Slick?Il pool di connessioni nella chiazza di petrolio?

+0

La mia ipotesi è che se la usi dall'interno del Play Frame lavoro 2.1 ottieni il pool di connessioni gratis. Play Framework utilizza [BoneCP] (http://jolbox.com/) come libreria sottostante – EECOLOR

+1

Non sto giocando. Grazie –

+0

Domanda simile: [Scala pool di pool di connessione?] (Http://stackoverflow.com/questions/5080707/scala-connection-pool-library) – EECOLOR

risposta

26

Io uso Apache Commons DBCP per questo. In sostanza, è sufficiente creare un DataSource, che incapsula i dettagli pooling, e passa che DataSource a 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) 

Questo esempio utilizza HSQLDB, ma può essere facilmente adattato a qualsiasi altro database.

L'esempio completo è here (è possibile clonare il progetto ed eseguire sbt run nella directory di sollevamento/per vederlo funzionante).