在 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
并失败。
我该怎么做?
这有两个方面:
- 设置超时;和
- 正在使用
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
设置的时间量。这可作为您的数据库连接参数的验证。
鉴于以下情况:
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
并失败。
我该怎么做?
这有两个方面:
- 设置超时;和
- 正在使用
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
设置的时间量。这可作为您的数据库连接参数的验证。