J'utilise le pilote JDBC sqlserver-jdbc-4.0.jar
pour sqlserver-jdbc-4.0.jar
connecter à SQL Server. J'ai créé une connection et l'ai utilisée avec succès.
Puis j'ai éteint l'interface réseau de la machine SQL Server. Lorsque j'exécute la command suivante, le pilote JDBC sur le côté de mon application nécessite environ 15 minutes pour comprendre que la connection est perdue. J'ai essayé plusieurs choses:
LoginTimeout=5, LockTimeout=5, QueryTimeout=5
(5 secondes) Statement.setQueryTimeout()
pour définir le timeout d'attente à 5 secondes Connection.isValid()
avec 5 secondes de timeout – il est également resté coincé pendant 15 minutes Une autre option possible – Connection.setNetworkTimeout()
mais elle n'est pas implémentée par le pilote SQL Server. Je ne peux pas non plus atteindre le socket utilisé par le pilote JDBC pour configurer TCP Keepalive.
Si je ferme la connection, puis l'ouvre à nouveau, il comprend immédiatement que l'instance SQL Server est inaccessible.
Comment puis-je surmonter mon problème et détecter la perte de connection en quelques secondes au lieu de 15 minutes?
Microsoft MSSQL-JDBC est maintenant Open source. Récemment, l'équipe MSSQL-JDBC a implémenté sockettimeout & querytimeout s. Cela va définitivement résoudre votre problème.