0

我使用 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 始终在运行,它是否应该只打开一次连接并通过检查使其保持打开状态以确保其仍然处于活动状态,而不是始终打开连接并关闭它?

感谢您对此提出的任何建议。

4

1 回答 1

0

是的,减少你的等待时间,这太高了。在 mysql 中,您可以增加最大连接数的值,将其增加到您的盒子可以处理的合理大小。

于 2013-04-11T19:39:44.353 回答