1
を返す連続データベース操作が発生した場合すべてが正常に動作している DataSource.getConnectionメソッドは、ここでは、データベースの再起動後に、既に閉じた接続または理想的な時間切れ
DataSource dataSource = DataSourceBuilder.create().url(url).username(userName).password(password).driverClassName(dataSourceReader.getSqlServerDriverClassName()).build();
Connection connection = dataSource.getConnection();
System.out.println(connection.isClosed()); //Print false
DataSource
からデータベース
Connection
を取得するために私のコードです。 私のアプリケーションをある程度の時間(接続タイムアウト)で理想的にするか、データベースサーバを再起動して上記のコードを実行しようとすると、閉じた接続が得られ、
connection.isClosed()
の出力は真です さらに、
connection
例外以下をスローする
com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) ~[sqljdbc4-4.0.jar!/:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(SQLServerConnection.java:388) ~[sqljdbc4-4.0.jar!/:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.prepareCall(SQLServerConnection.java:2176) ~[sqljdbc4-4.0.jar!/:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.prepareCall(SQLServerConnection.java:1861) ~[sqljdbc4-4.0.jar!/:na]
at sun.reflect.GeneratedMethodAccessor148.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126) ~[tomcat-jdbc-8.5.6.jar!/:na]
at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108) ~[tomcat-jdbc-8.5.6.jar!/:na]
at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:81) ~[tomcat-jdbc-8.5.6.jar!/:na]
at com.sun.proxy.$Proxy100.prepareCall(Unknown Source) ~[na:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
驚いたことに、私のJavaアプリケーションを再起動しても、同じコードが正常に動作します。
このような状況に対処するための提案はありますか?
閉じた接続を再度開くことはできますか?
詳細:
- Javaバージョン:1.8.0_25
- アプリケーションサーバー:Microsoft SQL Serverの標準版(64ビット)バージョン10.50.1617.0 :春ブーツ
- データベースとTomcatの8
- データベースドライバ:
com.microsoft.sqlserver:sqljdbc4:4.0'
私はdbcpの 'BasicDataSource'を使用しました。これは接続タイムアウトとデータベースの再起動後に動作します。私の問題を解決する –