БД не фиксируется после потребления сообщения в Spring Cloud Stream связывателя концентратора событий Azure

У меня есть загрузочное приложение Spring для прослушивателя событий, которое выполняет операцию чтения из раздела концентратора событий Azure -> Сохранение события в БД. Я использовал Sink spring-cloud-azure-eventhubs-stream-binder(версия - 1.2.1) для прослушивания событий из моей темы, и он отлично работает. Однако это событие не сохраняется в БД. Когда я посмотрел на созданный JPA sql, там вообще нет операции вставки. Я мог видеть только выполнение запроса Select при сохранении JPA.

Я просто следил за примером в ссылке eventhubs-binder-sample.

@StreamListener(Sink.INPUT)
public void handleMessage(String message, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) {
    System.out.println(String.format("New message received: '%s'", message));
    myRepository.save(message); // No Insert operation triggered
}

Любая операция сохранения JPA, выполняемая внутри аннотированного метода @StreamListener, не вставляет данные в БД.

Любые подсказки приветствуются.. Я должен что-то сделать с синхронизацией транзакций (KafkaTransactionManager + JPATransactionManager), я полагаю, но не уверен..

1 ответ

Он заработал, потратив на это день. Создал новый JpaTransactionManager и использовал его для создания TransactionTemplate.

И выполнил свои операции с БД в новой транзакции, созданной из TransactionTemplate.

TransactionTemplate template = new TransactionTemplate(platformTransactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult()
        {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status)
            {
                myRepository.save(message);
            }
        });
Другие вопросы по тегам