我们怎样才能让 MS JDBC 驱动程序在 n 秒后抛出超时错误?
背景
我们有一个应用程序,默认情况下使用 Microsoft JDBC 驱动程序(版本 4.0)来查询 SQL Server 2014。
大多数时候,查询需要 10-20 秒才能完成。然而,有时查询需要超过 5 分钟才能完成。
我们希望应用程序将耗时超过 5 分钟的查询视为错误。目前该应用程序没有提供超时设置,因此我们只能研究 MS JDBC 驱动程序的超时设置,但我找不到任何东西来标记长时间运行的查询有超时错误。
I have找到 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
Microsoft MSSQL-JDBC 现已开源。最近 MSSQL-JDBC 团队实施套接字超时 & 查询超时s。这绝对能解决你的问题。
使用连接查询:
String conURL = "jdbc:sqlserver://localhost;userName=sa;password=PASSW0RD;database=master;queryTimeout=5";
SQLServerConnection con = (SQLServerStatement) DriverManager.getConnection(conURL);
或使用数据源....
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();
Ref: https://github.com/Microsoft/mssql-jdbc/wiki/QueryTimeout
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)