MySQL超时到期后,c3p0的连接引发异常

马克·亨特

我使用版本0.9.2.1的c3p0库在Web应用程序中创建连接池。MySQL超时后,我得到异常:

“ HTTP状态500-从服务器成功收到的最后一个数据包是627301毫秒之前。成功发送到服务器的最后一个数据包是627302毫秒之前。比服务器配置的'wait_timeout'值长。和/或在用于您的应用程序之前测试连接的有效性,增加服务器为客户端超时配置的值,或使用Connector / J连接属性'autoReconnect = true'来避免此问题。”

我试图将autoReconnect参数附加到JDBC url,但是也没有任何效果。因此,以这种方式,我在应用程序中使用了连接池:

为了进行测试,我将MySQL的wait_timeout设置为180秒

set @@global.wait_timeout=180;

show global variables like "wait_timeout";

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  |  180  |
+---------------+-------+

以及接下来的几段代码

c3p0.properties

# JDBC paramters are ommited
# Basic pool configuration
c3p0.initialPoolSize=5
c3p0.minPoolSize=5
c3p0.maxPoolSize=50
c3p0.acquireIncrement=5
# Managing connection age
c3p0.maxConnectionAge=100
c3p0.maxIdleTime=90
# Configuring connection testing
c3p0.idleConnectionTestPeriod=30
c3p0.testConnectionOnCheckin=true
c3p0.preferredTestQuery=SELECT 1

DBConnectionUtil.java

public class DBConnectionUtil {
    // initialized through c3p0.properties
    private static ComboPooledDataSource ds = new ComboPooledDataSource();

    public static ComboPooledDataSource getConnectionPool() {
        return ds;
    }

    public static void destroyConnectionPool() {
        ds.close();
    }

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}

UserDAO.java

public class UserDAO {

    private Connection connection;

    public UserDAO() throws SQLException {
        connection = DBConnectionUtil.getConnection();
    }

    public User find(Integer id) throws SQLException {
        User user = null;
        PreparedStatement ps = connection.prepareStatement("SELECT * FROM `USERS` WHERE ID = ?");
        ps.setInt(1, id);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            user = new User();
            user.setId(rs.getInt("ID"));
            user.setName(rs.getString("NAME"));
            user.setUsername(rs.getString("USERNAME"));
            user.setPassword(rs.getString("PASSWORD"));
            user.setParentId(rs.getInt("PARENT_ID"));
        }
        rs.close();
        ps.close();
        return user;
    }
}

DAOUtil.java

public class DAOUtil {
    private static UserDAO userDAO;

    public static UserDAO getUserDAO() {
        return userDAO;
    }

    static {
        try {
            userDAO = new UserDAO();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

例如,在过期的MySQL wait_timeout之后,当我调用DAOUtil.userDAO.find(id)时,它将引发上面描述的异常。

您能帮我意识到我在做错什么吗?注意:我无法更改MySQL ini文件。

波姆金

尝试关闭您的Dao类中的连接,并为对数据库的每个请求从连接池中请求一个新的连接。

Connection con;
try {
  con=DBConnectionUtil.getConnection();
  //some code here
} finally {
  if(con!=null){
      con.close();
  } 

而且,将Connection作为对象字段是不安全的,最好将其用作局部变量,因为Connection不是线程安全的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C3P0连接池使用此配置给出连接超时错误

来自分类Dev

如何减少创建c3p0 ComboPooledDataSource并获得Oracle数据库连接的超时时间?

来自分类Dev

如何减少创建c3p0 ComboPooledDataSource并获得Oracle数据库连接的超时时间?

来自分类Dev

具有c3p0的spring JPA在第一个请求时具有连接超时

来自分类Dev

C3p0 APPARENT DEADLOCK异常

来自分类Dev

Mysql中使用c3p0和hibernate的连接过多

来自分类Dev

c3p0,MySQL和Java 8无法连接

来自分类Dev

在MySql中使用c3p0和hibernate的连接过多

来自分类Dev

带有 Hibernate 和 C3P0 的 Mysql 8.0.11:如何禁用通过 SSL 的连接?

来自分类Dev

c3p0似乎关闭了活动的连接

来自分类Dev

c3p0桩连接对象

来自分类Dev

使用c3p0连接池时,MySQL的最佳最大连接设置是多少?

来自分类Dev

与SQL Server的连接引发异常

来自分类Dev

XSLT文档功能在迁移后引发“连接超时”异常

来自分类Dev

当无法到达主机时,c3p0不超时

来自分类Dev

正在初始化 c3p0 池...超时

来自分类Dev

休眠状态:c3p0在NewProxyConnection.commit()上引发NullPointerException

来自分类Dev

连接关闭后不允许进行任何操作。驱动程序隐式关闭了连接。C3P0

来自分类Dev

在c3p0连接池中设置SQLite连接属性

来自分类Dev

Spring,Hibernate C3P0连接池,物理连接未关闭

来自分类Dev

当达到max_size时,c3p0不释放连接

来自分类Dev

配置c3p0以在连接断开时关闭Hibernate会话

来自分类Dev

检测传递到c3p0连接池的无效凭据

来自分类Dev

使用JDBC / c3p0连接到MariaDB

来自分类Dev

如何在C3P0中配置连接存在检查?

来自分类Dev

c3p0连接池错误-Oracle RAC

来自分类Dev

有时Hibernate无法通过C3P0获得连接

来自分类Dev

Hibernate c3p0中的连接签出是什么?

来自分类Dev

C3p0尝试创建新的连接池并失败,并显示ClassNotFoundException

Related 相关文章

  1. 1

    C3P0连接池使用此配置给出连接超时错误

  2. 2

    如何减少创建c3p0 ComboPooledDataSource并获得Oracle数据库连接的超时时间?

  3. 3

    如何减少创建c3p0 ComboPooledDataSource并获得Oracle数据库连接的超时时间?

  4. 4

    具有c3p0的spring JPA在第一个请求时具有连接超时

  5. 5

    C3p0 APPARENT DEADLOCK异常

  6. 6

    Mysql中使用c3p0和hibernate的连接过多

  7. 7

    c3p0,MySQL和Java 8无法连接

  8. 8

    在MySql中使用c3p0和hibernate的连接过多

  9. 9

    带有 Hibernate 和 C3P0 的 Mysql 8.0.11:如何禁用通过 SSL 的连接?

  10. 10

    c3p0似乎关闭了活动的连接

  11. 11

    c3p0桩连接对象

  12. 12

    使用c3p0连接池时,MySQL的最佳最大连接设置是多少?

  13. 13

    与SQL Server的连接引发异常

  14. 14

    XSLT文档功能在迁移后引发“连接超时”异常

  15. 15

    当无法到达主机时,c3p0不超时

  16. 16

    正在初始化 c3p0 池...超时

  17. 17

    休眠状态:c3p0在NewProxyConnection.commit()上引发NullPointerException

  18. 18

    连接关闭后不允许进行任何操作。驱动程序隐式关闭了连接。C3P0

  19. 19

    在c3p0连接池中设置SQLite连接属性

  20. 20

    Spring,Hibernate C3P0连接池,物理连接未关闭

  21. 21

    当达到max_size时,c3p0不释放连接

  22. 22

    配置c3p0以在连接断开时关闭Hibernate会话

  23. 23

    检测传递到c3p0连接池的无效凭据

  24. 24

    使用JDBC / c3p0连接到MariaDB

  25. 25

    如何在C3P0中配置连接存在检查?

  26. 26

    c3p0连接池错误-Oracle RAC

  27. 27

    有时Hibernate无法通过C3P0获得连接

  28. 28

    Hibernate c3p0中的连接签出是什么?

  29. 29

    C3p0尝试创建新的连接池并失败,并显示ClassNotFoundException

热门标签

归档