Асинхронные вставки в таблицу аудита в Spring-Hibernate - PullRequest
0 голосов
/ 29 октября 2018

У меня есть таблица БД с множеством столбцов и связанных сущностей. Обновление поддерживается в некоторых столбцах. Мне нужно вести историю данных, которые перезаписываются при обновлении / удалении, в отдельной таблице. Варианты, которые я рассмотрел, приведены ниже:

1. Hibernate-envers: Наиболее простой в использовании, но проблема заключается в том, что вставка в таблицу аудита является синхронной, и она также становится частью реальной транзакции. Что не является желаемым решением для моего варианта использования.

2. Debezium: Хотя это и делает вставку аудита асинхронной, но для моего сценария использования это выглядит излишним, поскольку включает в себя установку множества служб, таких как Kafka, zookeeper, и, похоже, существует несколько точек отказа.

3. Слушатели JPA: Я могу использовать их, чтобы получить обновляемые / удаленные данные и вызвать асинхронную вставку в таблицу истории. Единственная проблема, которую я вижу здесь, это то, что мне придется копировать реальный код классов сущностей в сущности истории.

Пожалуйста, предложите решение, с которым я могу пойти дальше. Спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

Я бы рекомендовал использовать @Async аннотацию Spring. Это приведет к асинхронному выполнению метода. Чтобы использовать его, вам нужно добавить аннотацию @EnableAsync в файл конфигурации, а затем вы можете добавить @Async к любому методу, который вы хотите.

Конфигурация

@Configuration
@EnableAsync
public class SpringAsyncConfig { ... }

Usage

@Async
public void insertAudit(Audit audit){ ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...