Перехватывать все вызовы записи в MongoDB Spring Boot - PullRequest
1 голос
/ 12 октября 2019

Я работаю с Spring Boot 2.1.5. Я пытаюсь написать службу, которая перехватывает все вызовы записи в MongoDB. По сути, что-то вроде журнала операций в СУБД, где перед тем, как какие-либо данные записываются в БД или даже обновляются или удаляются, я фиксирую документ, который обновляется или создается.

Возможно ли это вообще? Если так, то как?

Это для вызовов БД из моего приложения. Поскольку вы видите, скажем, у вас большое приложение, содержащее 100 API или около того, на самом деле трудно интегрировать OpLog (обновления, запись, удаление БД) во все контроллеры или службы API, вместо этого записать перехватчик или аспект, который запускается перед функциямиMongoRepository или MongoTemplate называется.

1 Ответ

0 голосов
/ 13 октября 2019

Вы можете расширить org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener и реализовать свой собственный слушатель.

Здесь относится к пружинным документам.

В AbstractMappingEventListener присутствуют следующие методы обратного вызова:

onBeforeConvert: Вызывается в операциях вставки, вставки и сохранения MongoTemplate до преобразования объекта в документ с помощью MongoConverter.

onBeforeSave: вызывается в операциях вставки, вставки и сохранения MongoTemplate перед вставкой или сохранением документа в базе данных.

onAfterSave: вызывается в операциях вставки, вставки и сохранения MongoTemplate после вставки или сохранения документав базе данных.

onAfterLoad: Вызывается в MongoTemplate методы find, findAndRemove, findOne и getCollection после извлечения документа из базы данных.

onAfterConvert: Вызывается в MongoTemplate find, findAndRemove, findOneи методы getCollection после того, как документ был извлечен из базы данных, был преобразован в POJO.

Если вы хотите регистрировать все операции, вы можете определить bean-компонент org.springframework.data.mongodb.core.mapping.event.LoggingEventListener.

@Configuration
public class MongoConfig {

    @Bean
    public LoggingEventListener<Object> listener(){
        return new LoggingEventListener();
    }
}
...