如何在 groovy sql 中设置连接超时?

Posted

技术标签:

【中文标题】如何在 groovy sql 中设置连接超时?【英文标题】:How to set connection timeout in groovy sql? 【发布时间】:2015-05-14 15:17:52 【问题描述】:

有没有办法在groovy sql中设置连接超时,默认连接超时是多少?我检查了官方文档here,但没有得到任何东西。下面是我的代码。

private final def dev_env = [
    url:"jdbc:oracle:thin:@//aguat:1521/orcl",
    user:"ricky",
    password:"ricky",
    driver:"oracle.jdbc.OracleDriver"
]
def query="select * from emp where email=?"
def keys=["ricky@gmail.com"]
def Sql sql = Sql.newInstance(dev_env)
def results = []
sql.eachRow(query,keys)row ->
    def resultMap = [:]
    row.toRowResult().each k,v-> resultMap.put(k,v) 
    results << resultMap            

Groovy 版本:1.8.6

请帮忙

【问题讨论】:

看看这个答案:***.com/questions/18685899/…:) 【参考方案1】:

Groovy SQL 不控制超时,这取决于您的驱动程序(在您的情况下为 Oracle)。如果您想为查询设置超时,请查看this answer。

如果您想要一个连接级别设置(这样您就可以将 Sql 对象重复用于多个查询,每个查询都应用超时),您需要设置自己的连接并将其传递给 Groovy 的 Sql 外观。像这样

def dev_env = [
  url:"jdbc:oracle:thin:@//aguat:1521/orcl",
  user:"ricky",
  password:"ricky",
  driver:"oracle.jdbc.OracleDriver"
]
Class.forName(dev_env['driver'])
def conn = DriverManager.getConnection(dev_env['url'], dev_env['user'],dev_env['password'])
conn.setNetworkTimeout(null, 10000)
def sql = new Sql(conn)

注意 setNetworkTimeout() 方法是在 Java 7 中添加的。如果您使用的是旧版本的 Java,请查看此 answer(您可以使用 "oracle.jdbc.OracleDriver" 而不是 OracleConnection.CONNECTION_PROPERTY_THIN_NET_CONNECT_TIMEOUT 字段回答如果您想避免对 Oracle jar 的编译依赖,请提及)。

同样,由于 Groovy 的 Sql 不会更改或控制任何连接设置,默认超时将是 Oracle 驱动程序的默认超时。

【讨论】:

以上是关于如何在 groovy sql 中设置连接超时?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQLAlchemy 中设置连接超时

建立多个连接时如何在C中设置套接字超时?

在 CodeIgniter 3 中设置数据库连接超时

如何在IIS中设置,客户端20分钟不操作,自动断开连接

如何在与 SQL 的连接中设置日期格式?

在 python thrift 客户端中设置套接字的连接和读取超时