Добрый день!
Есть задачка: создать новую сущность в отдельной транзакции в том же потоке, в котором выполняется основная транзакция. Пробовал разные варианты реализации, но безуспешно. Пробовал автоматическое создание транзакции с помощью аннотации @Transactional(propagation = Propagation.REQUIRES_NEW)
на методе.
Пробовал создавать транзакцию вручную таким образом:
@Autowired
private UnconstrainedDataManager systemDataManager;
@Autowired
PlatformTransactionManager transactionManager;
private final TransactionTemplate transactionTemplate;
this.transactionTemplate = new TransactionTemplate(transactionManager);
this.transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
res = this.transactionTemplate.execute(status -> {
ExtEntity e = systemDataManager.create(ExtEntity.class);
e.setName(key);
systemDataManager.save(e);
});
И вызываю этот код из другого метода, который выполняется в своей транзакции. В результате приложение зависает на комите внутренней транзакции. Видимо он ждёт комита внешней транзакции.
Может кто-то делал что-то подобное? Буду благодарен за совет