Это было странно, но я наконец решил свою проблему.
Причиной такой блокировки соединения было то, что я использовал как декларативное, так и программное управление транзакциями со Spring.Я думаю, что мое программное управление транзакциями было неправильно.
Вот код, используемый для начала транзакции:
//Return Spring context
ApplicationContext context = ApplicationContextHolder.getContext();
// transactionManager
PlatformTransactionManager transactionManager = (PlatformTransactionManager) context.getBean("txManager");
//Set propagation required
DefaultTransactionDefinition td = new DefaultTransactionDefinition();
td.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
// Begin
TransactionStatus transactionStatus = transactionManager.getTransaction(td);
Как видите, я установил программные транзакции как «обязательные».Но когда эти транзакции были запущены в контексте транзакций, Spring не распознал текущую транзакцию и начал новую.Это привело к блокировке соединения ...
Я решил эту загадку, удалив программное управление транзакциями.