gpt4 book ai didi

java - MYSQL数据库很多连接问题

转载 作者:行者123 更新时间:2023-12-01 16:24:16 25 4
gpt4 key购买 nike

我的Web Spring-Boot Web应用程序有基于docker的解决方案。除数据库有时无法使用mySQL Workbench之类的客户端进行连接外,其他数据库都正常运行。它只是抛出一个错误,指出那里有太多连接。在我的应用程序中,我正在使用JDBCTemplate。我总是在最终主体中关闭连接。

在我的PC上的本地环境中,这工作正常。问题是当我在VPS上部署时,该VPS已安装Docker并且具有用于mySQL DB的Docker容器。我的Web应用程序在另一个容器中运行。

问题:jdbcTemplate.getDataSource()。getConnection(); //根据官方文档,这是单身吗?

这是我的代码示例:

 try{
connection = jdbcTemplate.getDataSource().getConnection();
pst = connection.prepareStatement(sql);
pst.setInt(1,terminal_id);

nbDeletedRows = pst.executeUpdate();


}catch (SQLException e)
{
log.error("Some error has occurred with your query.",e);
}
finally {
SQLResourceHandler.closeResources(rs,connection,pst);
}


这是SQLResourceHandler类的代码:

public class SQLResourceHandler {

private static final Logger log = LoggerFactory.getLogger(ProjectDAO.class);

public static void closeResources(ResultSet rs, Connection conn, PreparedStatement pst)
{
try {
if (rs != null) {
rs.close();
}
if (conn != null) {
conn.close();
}
if (pst != null) {
pst.close();
}
}
catch(SQLException e)
{
log.error("Error has occured while closing database resource",e);
}
}
}

最佳答案

这是连接泄漏。资源处理程序关闭的每件事都可能引发SQLException。如果发生这种情况,则不会调用以下语句。如果关闭ResultSet导致异常,则连接不会返回到池中。

在此不要使用原始的jdbc,而应使用jdbcTemplate method update。不要从数据源获得连接。 jdbcTemplate知道如何获取连接,并将其返回到池中,而您不必这样做。也不要捕获异常。

关于java - MYSQL数据库很多连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62185552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com