Я использую репозитории JPA, также использую программное управление транзакциями в моем коде следующим образом
public class PipelineJobProcessor {
@Autowired
private EntityManagerFactory emf;
@Autowired
private PipelineJobRepository pipelineJobRepository; //JPA repository
@Transactional
public void someMethod () {
..
pipelineJobRepository.save(entity);
}
.
.
//Manual transaction management
private void savePipelineJob(PipelineJob pipelineJob) {
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
pipelineJobRepository.save(pipelineJob);
tx.commit();
} catch (Exception e) {
tx.rollback();
throw e;
} finally {
em.close();
}
}
}
Однако после пары вызовов API, похоже, пул соединений не имеет свободных соединений, и я получаю следующую ошибку:
Какие-нибудь советы по этому поводу?
org.springframework.transaction.CannotCreateTransactionException:
Не удалось открыть JPA EntityManager для транзакции; вложенное исключение
org.hibernate.exception.JDBCConnectionException: невозможно получить
Соединение с JDBC на
org.springframework.orm.jpa.JpaTransactionManager.doBegin (JpaTransactionManager.java:446)
в
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction (AbstractPlatformTransactionManager.java:378)
в
org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary (TransactionAspectSupport.java:474)
в
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport.java:289)
в
org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor.java:98)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186)
в
org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke (PersistenceExceptionTranslationInterceptor.java:139)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186)
в
org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor $ CrudMethodMetadataPopulatingMethodInterceptor.invoke (CrudMethodMetadataPostProcessor.java:138)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186)
в
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke (ExposeInvocationInterceptor.java:93)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186)
в
org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke (SurroundingTransactionDetectorMethodInterceptor.java:61)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186)
в
org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.java:212)
на com.sun.proxy. $ Proxy126.save (неизвестный источник) на
com.company.dps.dataplatform.pipeline.generator.PipelineJobProcessor.savePipelineJob (PipelineJobProcessor.java:182)