在 Slick 中验证“DatabaseDef”

Validate `DatabaseDef` in Slick

鉴于以下情况:

scala> Class.forName("com.mysql.jdbc.Driver")
res0: Class[_] = class com.mysql.jdbc.Driver

scala> import slick.driver.MySQLDriver.api._
import slick.driver.MySQLDriver.api._

我可以定义这个无效的数据库连接:

scala> val db = Database.forURL("jdbc:mysql://www.google.com:3306/person",
               "root", "")
db: slick.driver.MySQLDriver.backend.DatabaseDef = 
         slick.jdbc.JdbcBackend$DatabaseDef@18b5c395

我宁愿快速失败,即尝试验证此 db 并失败。

我该怎么做?

这有两个方面:

  1. 设置超时;和
  2. 正在使用DatabaseDef(db)尝试使用连接。

1.设置超时

从 MySQL Driver/Datasource Class Names, URL Syntax and Configuration Properties for Connector/J page 开始,MySQL 驱动程序的连接超时默认为 "no timeout"。

要更改它,请提供一个配置参数作为您的一部分 JDBC URL:

val db = Database.forURL(
  "jdbc:mysql://www.google.com:3306/person?connectTimeout=500", 
  "root", 
  "")

以上将超时设置为 500 毫秒。

2。正在连接

要强制db 建立连接,我们需要对数据库做一些事情。例如,我们可以尝试 运行 一个查询。在下面的代码中,我使用 DatabaseDef.createSession.con 与数据库建立连接:

import scala.util._
def test() = Try(db.createSession.conn) match { 
   case Success(con) => con.close
   case fail         => println("Didn't connect") 
}

test() 的调用将阻塞大约为 connectTimeout 设置的时间量。这可作为您的数据库连接参数的验证。