Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat和mySQL配置_Java_Mysql_Database_Apache_Tomcat - Fatal编程技术网

Java Tomcat和mySQL配置

Java Tomcat和mySQL配置,java,mysql,database,apache,tomcat,Java,Mysql,Database,Apache,Tomcat,我已经使用Tomcat和mySQL有一段时间了,但最近我已经设法最大限度地利用了我的连接。我不知道为什么,因为我的代码会在连接完成时打开和关闭连接。例如,下面是我的connect和close方法: public void closeConnection(){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } public void connect(

我已经使用Tomcat和mySQL有一段时间了,但最近我已经设法最大限度地利用了我的连接。我不知道为什么,因为我的代码会在连接完成时打开和关闭连接。例如,下面是我的connect和close方法:

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"/>

现在此刻我被锁在外面,因为我有最大的连接。我应该降低等待时间以避免这种情况吗

关于我的代码,我应该说的一点是,它经常会在大循环中触发多个语句。我想也许这种快速的开盘和收盘可能是问题所在。由于我的TomcatServlet总是在运行,它是否应该只打开一次连接并保持打开状态并进行检查以确保其仍然处于活动状态,而不是总是打开并关闭连接


谢谢你在这方面的所有建议

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

WRT您的问题-当您的连接数达到最大值时,您的应用程序是否挂起?如果是这样,您的代码中的同步锁和表锁的组合可能会出现问题。您看到的实际问题是什么?看起来您正在使用连接池,因此您的连接不会真正被关闭,只需将其放回连接池即可。这可能解释了为什么您的连接保持打开状态!我应该如何使用连接池?问题是数据库的连接数太多。应用程序没有挂起,只是无法获取任何数据。你的意思是它在该点无法获取任何新连接吗?现有连接(以及使用它们的线程)在做什么?查询是否“卡住”?您应该能够从mysql和/或通过使用java Profiler发现这一点,什么是合理的等待时间?@CloudyDna-您能解释一下为什么您认为缩短等待时间会有所帮助吗?