You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产环境调用存储过程时出现Hikari无法获取JDBC连接问题

生产环境独有问题排查求助

我在UAT环境及本地运行代码时均未遇到该问题,但此问题仅在生产环境出现,且已执行压力测试仍未复现该问题。
应用部署在外部Tomcat服务器,但服务使用Hikari连接池。我正尝试排查问题,但尚未找到任何线索。

相关Hikari连接池配置

spring.datasource.minimumIdle=1
spring.datasource.maximumPoolSize=10
spring.datasource.idleTimeout=600000          # 10 min
spring.datasource.maxLifetime=1800000         # 30 min
spring.datasource.connectionTimeout=3000      # 3 sec

核心业务代码

@Override
public Response procedureCall(Message req) {
    EntityManager em = null;
    Session session = null;
    try {
        em = getWay4EntityManager();
        em.getTransaction().begin();

        session = em.unwrap(Session.class);

        Response response = session.doReturningWork(connection -> {
            try (CallableStatement function = connection.prepareCall(PROCEDURE)) {
                function.setString(1, req.getOperation().toString());
                function.setString(2, req.getAction());
                function.setString(3, req.getPun());
                function.setString(4, req.getRequest());
                function.setString(5, req.getEncryptedOpt());
                function.setString(6, req.getOptStatus());
                function.setString(7, req.getConfirmationId());
                function.setString(8, req.getGenericStatusCode());
                function.setString(9, req.getFailureStatus());
                function.setString(10, req.getResponse());
                function.setString(11, req.getSeq());

                function.registerOutParameter(12, Types.VARCHAR);
                function.registerOutParameter(13, Types.VARCHAR);
                function.registerOutParameter(14, Types.VARCHAR);
                function.execute();

                return Response.builder()
                        .seq(function.getString(12))
                        .code(function.getString(13))
                        .desc(function.getString(14))
                        .build();
            }
        });

        return response;

    } catch (Exception e) {
        logger.error("Exception in procedure call", e);
        return Response.builder().code("500").desc("Sql Exception").build();

    } finally {
        if (session != null && session.isOpen()) {
            session.close();  // safe to close here
        }
        if (em != null) {
            em.getTransaction().commit(); 
            em.close();
        }
    }
}

内容的提问来源于stack exchange,提问作者Shahid Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:18:32