[英]JDBC connection become null unexpectedly
我與JDBC(DB2)的數據庫連接有問題。 我最近在代碼塊上實現了事務管理(提交/回滾),並且我對數據庫上的所有查詢/操作使用相同的連接。 我們從不明確關閉每個查詢/操作之間的連接。 但是,在運行時,我們得到一個異常,表明我們的連接無效(closed / null)。 當我逐步調試時,似乎連接字段意外地變為空。 它看起來是隨機的,它永遠不會發生在同一條線上。 我確信我們不會自己關閉連接! 我們在Tomcat中使用連接池。
這是一個代碼示例:
try {
connection = DB.getConnection();
connection.setAutoCommit(false);
savepoint = connection.setSavepoint("avantModif");
/* * Here are some queries and operations that runs without error
when the connection is not null */
connection.commit();
}
catch(Exception e) {
if (connection != null && !connection.isClosed() && savepoint != null)
{
connection.rollback(savepoint);
}
throw e;
}
finally
{
if(connection != null){
connection.close();
}
這是一個顯示Connection對象內容的調試器屏幕截圖:
這是Tomcat的server.xml中的連接池定義:
<Resource
name="jdbc/dbcpGlobal"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.ibm.as400.access.AS400JDBCDriver"
url="jdbc:as400://lvq400/apilib;naming=system;errors=full;date format=iso;prompt=false;trace=false;reconnect=true"
username="[here_is_our_username]" password="[here_is_our_password]"
maxIdle="7" maxActive="15" maxWait="5"
removeAbandoned="true" removeAbandonedTimeout="120" logAbandoned="true"
testOnBorrow="true" testOnReturn="true" validationQuery="select 1 from sysibm/sysdummy1" />
該對象實際上不是null,其內容變為null!
有沒有理由說JDBC連接內容會變為空?
我很確定你真的應該關閉連接。 因為你得到的是一個代理對象,“關閉”它只會將它返回到池中。 我猜Tomcat在某些時候開始殺死你的連接,因為它們似乎被拋棄了。 發生這種情況時,日志中是否有任何內容,因為您有logAbandoned =“true”?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.