我一直在使用Tomcat和mySQL很長一段時間,但最近一直在設法最大化我的連接。我不知道爲什麼當我的代碼打開並在完成時關閉連接。比如這裏是我的連接和關閉的方法:Tomcat和mySQL配置
public void closeConnection(){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void connect(){
try {
initCtx = new InitialContext();
} catch (NamingException e) {
e.printStackTrace();
}
try {
envCtx = (Context) initCtx.lookup("java:comp/env");
} catch (NamingException e) {
e.printStackTrace();
}
try {
ds = (DataSource) envCtx.lookup("jdbc/TestDB");
} catch (NamingException e) {
e.printStackTrace();
}
}
這是執行通用聲明的基本方法:
public void excuteStatement(String query){
connect();
try {
con = ds.getConnection();
con.createStatement().executeUpdate(query);
} catch (Exception ex){
} finally {
if (con != null)
closeConnection();
}
}
是否有任何理由這種代碼應該會導致連接是保持開放?我獲得了我需要的所有數據,99%的時間內一切正常。
這是我在Tomcat的context.xml配置:
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="myUserName" password="myPass" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://xxx.xxx.xxx.xxx:0000/myUserName"/>
現在,在這個非常時刻,我被鎖在我有最大連接數。我應該減少等待時間來避免這種情況嗎?
我應該說我的代碼的一件事,它經常會在大循環中觸發許多多個語句。我想也許這個快速開放和關閉可能是問題。由於我的Tomcat servlet一直運行,只要它打開一個連接一次,並打開它的檢查,以確保它仍然活躍,而不是總是打開連接並關閉它?
感謝您對此的任何建議。
WRT您的問題 - 當您的連接超出最大值時,您的應用程序將掛起?如果是這樣,您可能在代碼和表鎖的組合中遇到問題 – 2013-04-11 19:51:05
您看到的實際問題是什麼?看起來您正在使用連接池,因此您的連接不會真正關閉,只需放回池中即可。這可以解釋爲什麼你的連接保持開放! – 2013-04-11 20:04:37
我應該如何使用連接池?問題是數據庫連接最多。該應用程序不掛它只是無法獲得任何數據。 – 2013-04-12 05:15:17