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

时间:2015-05-14 15:17:52

标签: oracle groovy

有没有办法在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

请帮忙

1 个答案:

答案 0 :(得分: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)

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

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