有没有办法在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
请帮忙
答案 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驱动程序的默认超时。