AOP + Reactive setup возвращает ошибку E11000 Mongo - PullRequest
0 голосов
/ 24 июня 2019

Кажется, что у меня не работает AOP с настройкой Reactive.

Я написал аспект, который должен отлавливать результат реактивной функции и отправлять его дальше. И когда я внезапно запускаю тесты, у меня появляется ошибка Монго, которой у меня никогда не было:

org.springframework.dao.DuplicateKeyException: E11000 duplicate key error collection

Вот мой аспект. Он только делает некоторые проверки и отправляет результат. Не касаясь БД.

@Retention(AnnotationRetention.RUNTIME)
annotation class SpecialAnnotation

@Aspect
@Component
class MyAspect(val sender: MySender) {

    @AfterReturning(pointcut = "@annotation(SpecialAnnotation)", returning = "result")

    fun send(joinPoint: JoinPoint, result: Any) {

        (result as Mono<MyResult>)
           .map { sender.send(result) }
           .subscribe()
    }
}

Вот как я это называю:

@Component
class MyJoinPoint {

    @SpecialAnnotation
    fun getResult(): Mono<Result> {....}

}

Проблема устранена, если аннотация аспекта или подписка удалены. Конечно, это не тот результат, которого я ожидал.

Должен ли я использовать для этого специальную AOP-реактивную версию? Есть ли альтернатива? В чем может быть проблема с ошибкой БД?

...