Bir MySQL arka uç ile tomcat üzerinde çalışan bir webapp var. Bizim veri kaynağı olarak org.apache.commons.dbcp.BasicDataSource
kullanıyorjava.sql.SQLException: Zaten kapalı
DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] Fetching JDBC Connection from DataSource
DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] Returning JDBC Connection to DataSource
DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] Could not close JDBC Connection
java.sql.SQLException: Already closed.
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:114)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:191)
at org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:333)
at org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:294)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:405)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:428)
at com.nokia.analytics.aws.aggregate.service.importer.DBInsert.truncateTable(DBInsert.java:135)
at com.blah.analytics.aggregate.service.importer.AggregateCollector.pullAndInsert(AggregateCollector.java:85)
at com.blah.analytics.aggregate.service.importer.AggregateCollector.call(AggregateCollector.java:96)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:679)
: Tüm sonra aniden bu istisnayı java.sql.SQLException: Already closed.
tüm yığın izlemesi başlarken, bir ara iyiydi. Ben biraz aradım ama boşuna. Her zaman oluşmaz ve bu nedenle çoğaltılması çok zordur. Db bağlantı havuzu ile ilgili bir sorun gibi görünüyor. Bir yerlerde this parametresi negatif olarak ayarlanması önerildi. Şu anda bu parametreler değişmiyor (tümü varsayılan vals var).
Bundan kaçınmak için hangi yaklaşımı takip etmeliyiz?
DÜZENLEME:
ilgili kodu (DBInsert.java) içinde
133 geçerli: String sql = "DELETE FROM "+tableName;
134: logger.debug(sql);
135: this.jdbcTemplate.execute(sql);
(133-135 vardır istisnada belirtilen satır no.)
Benim veri kaynağı yapılandırma: Bu sorunun
<bean id="bisToolDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="${url}/blah_db?verifyServerCertificate=false&useSSL=true&requireSSL=true" />
<property name="username" value="${uname}" />
<property name="password" value="${passwd}" />
</bean>
Kodunuz nerede? –
Bunun nedenini bilmiyorum, ama bir hata, ['Connection.close()'] (http://docs.oracle.com/javase/7/docs/api/java/sql/Connection. html # close()), eğer zaten kapalıysa bir istisna atmamalısınız: _ "Zaten kapalı olan bir' Connection 'nesnesindeki' close' metodunu çağırmak bir op-op'tur ”_ –