我们怎样才能让MS JDBC Driver在n秒后抛出超时错误?
背景
我们有一个应用程序默认使用Microsoft JDBC驱动程序(版本4.0)来查询SQL Server 2014。
大多数情况下,查询需要10-20秒才能完成。但是,有时候查询需要5分钟以上才能完成。
我们希望应用程序将超过5分钟的查询视为错误。目前,该应用程序没有提供超时设置,因此我们将继续研究MS JDBC驱动程序的超时设置,但是我找不到任何标记超时错误的长时间运行查询的内容。
我 找到了jTDS驱动程序的超时设置(socketTimeout)。
MS驱动程序是否有等效的“socketTimeout”或“queryTimeout”?我已经尝试了以下所有内容,但它们都不适用于MS驱动程序:
#None of these enforce a timeout with the MS Driver
jdbc:sqlserver://hostname\instanceName;databaseName=mydb;queryTimeout=10
jdbc:sqlserver://hostname\instanceName;databaseName=mydb;socketTimeout=10
jdbc:sqlserver://hostname\instanceName;databaseName=mydb;queryTimeout=10
#This works great with the jTDS driver:
jdbc:sqlserver://hostname\instanceName;databaseName=mydb;socketTimeout=10
答案 0 :(得分:1)
Microsoft MSSQL-JDBC现已开源。最近,MSSQL-JDBC团队实施了sockettimeout& querytimeout秒。这肯定会解决你的问题。
使用连接查询:
String conURL = "jdbc:sqlserver://localhost;userName=sa;password=PASSW0RD;database=master;queryTimeout=5";
SQLServerConnection con = (SQLServerStatement) DriverManager.getConnection(conURL);
或使用DataSource ....
SQLServerDataSource ds = new SQLServerDataSource();
ds.setUser("sa");
ds.setPassword("PASSWORD");
ds.setServerName("localhost");
ds.setPortNumber(1433);
ds.setDatabaseName("master");
ds.setQueryTimeout(5);
SQLServerConnection con = (SQLServerConnection) ds.getConnection();
参考:https://github.com/Microsoft/mssql-jdbc/wiki/QueryTimeout