本文来自:fair-jm.iteye.com 转截请注明出处
Slick2可以使用内置的Database(使用时导入对应数据库的对应的包
比如mysql是:import scala.slick.driver.MySQLDriver.simple._) 的 forURL方法(这个方法通过DriverManager来拿到连接 这个在前面的几个笔记里都有
还有forDriver是直接通过Driver来拿到连接)来拿到数据库连接
Slick2也可以通过forName(JNDI)和forConfig(通过配置)的方式拿到
这篇po要说的是forDataSource这个方法
/** * Create a Database based on a DataSource. */ def forDataSource(ds: DataSource): DatabaseDef = new DatabaseDef { def createConnection(): Connection = ds.getConnection }
这个DataSource类是:javax.sql.DataSource
这边简单说下使用数据源的方式
数据源我这里使用阿里的Druid 这个选用哪个是无所谓的 看个人爱好吧
习惯使用Spring xml方式配置dataSource的同学 可能会对在代码上配置感到陌生 但其实也挺简单的
配置代码如下:
package infrastructure import com.alibaba.druid.pool.DruidDataSource import javax.sql.DataSource sealed class DS(val config: DataSourceConfig) { private val dataSource = new DruidDataSource conf(config) def get: DataSource = { sync(!dataSource.isInited(), dataSource.init(), dataSource) dataSource } def close = { sync(dataSource.isInited(), dataSource.close(), dataSource) } private def sync(test: => Boolean, op: => Unit, lock: AnyRef) = { if (test) lock.synchronized { if (test) op } } private def conf(config: DataSourceConfig): Unit = { dataSource.setUrl(config.url) dataSource.setUsername(config.name) dataSource.setPassword(config.password) dataSource.setInitialSize(config.initSize) dataSource.setMinIdle(config.minIdle) dataSource.setMaxActive(config.maxActive) dataSource.setValidationQuery(config.validateQuery) } } object DS { val _lock = new Object val db = new DS(new MyDataSourceConfig) def apply() = { _lock.synchronized { db.get } } def apply(conf: DataSourceConfig) = { _lock.synchronized { db.conf(conf) db.dataSource.restart() db.get } } } trait DataSourceConfig { def url: String def name: String def password: String def initSize: Int = 1 def minIdle: Int = 1 def maxActive: Int def validateQuery = "select 'x'" } class MyDataSourceConfig extends DataSourceConfig { def url = "jdbc:mysql://localhost:3306/cqrs" def name = "root" def password = "" def maxActive = 10 }
关于以上几个参数 可以参考druid的github
使用也很简单:
Database.forDataSource(DS()).withSession {
implicit session =>
q.list
}