我有一个springboot应用程序,它经常调用存储过程,执行一些插入并更新到某些表。我可以看到功能上这段代码有效,但过了一段时间我可以打开更多的连接,并且任何运行任何查询的新请求都不满意并且低于错误
'Timeout: Pool empty. Unable to fetch a connection in 30 seconds, none available[size:100; busy:100; idle:0; lastwait:30000].","logger_name":"org.hibernate.engine.jdbc.spi.SqlExceptionHelper"'
下面是调用存储过程的代码,我尝试使用实体管理器更改为不同的实现,但结果相同
对此问题有任何想法,如果没有提及,请告诉我。
@Transactional
private Status bulkSaveOrderInterfaceStatus(String procName,String orderIds,
interfaceType, String errorMsg, String status) {
String outPutPram;
try(Session session = (Session) em.getDelegate()) {
SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) session.getSessionFactory();
Session ses = sessionFactory.openSession();
ses.beginTransaction();
ProcedureCall storedProcedure = ses.createStoredProcedureCall(procName);
storedProcedure.registerParameter(SqlConstants.BULK_INS_PROCEDURE_ORDERID_INPUTPARM, String.class, ParameterMode.IN).bindValue(orderIds);
storedProcedure.registerParameter(SqlConstants.BULK_INS_PROCEDURE_INTERFACETYPE_INPUTPARM,String.class, ParameterMode.IN).bindValue(interfaceType);
storedProcedure.registerParameter(SqlConstants.BULK_INS_PROCEDURE_ERRORMSG_INPUTPARM,String.class, ParameterMode.IN).bindValue(errorMsg);
storedProcedure.registerParameter(SqlConstants.BULK_INS_PROCEDURE_STATUS_INPUTPARM,String.class, ParameterMode.IN).bindValue(status);
storedProcedure.registerParameter(SqlConstants.PROCEDURE_OUTPUT_MESSAGE, String.class, ParameterMode.OUT);
outPutPram = (String) storedProcedure.getOutputs().getOutputParameterValue(SqlConstants.PROCEDURE_OUTPUT_MESSAGE);
ses.getTransaction().commit();
if (outPutPram.equals(SqlConstants.PROCEDURE_STATUS_SUCCESS)) {
return Status.SUCCESS;
} else {
return Status.ERROR;
}
} catch (Exception e) {
return Status.ERROR;
}
}