БД не фиксируется после потребления сообщений в облачном потоке Spring Azure Event Hub binder - PullRequest
1 голос
/ 17 февраля 2020

У меня есть приложение Spring Spring для прослушивания событий, которое выполняет операцию Чтение из Azure Концентратор событий Topi c -> Сохранение события в БД . Я использовал Sink spring-cloud- azure -eventhubs-stream-binder (Версия - 1.2.1) для прослушивания событий из моего topi c, и он отлично работает. Однако это событие не сохраняется в БД. Когда я посмотрел на 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 Ответ

0 голосов
/ 18 февраля 2020

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

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

TransactionTemplate template = new TransactionTemplate(platformTransactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult()
        {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status)
            {
                myRepository.save(message);
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...