Spring Modulith 活动

Spring Modulith Events

提问人:Pratik 提问时间:10/26/2023 最后编辑:Pratik 更新时间:10/26/2023 访问量:30

问:

我正在使用注释@Transactional注释的方法中发布事件。 侦听器是带有@TransactionalEventListener注释的。

上面的设置导致同步(我们可以用@Async来改变它)事件处理,事件也通过弹簧模事件本身(我使用的是postgres)存储到数据库中。

但是,如果我使发布者成为非事务性(即删除@Transactional注释),则侦听器不会侦听和执行用于它的事件。我们也没有得到数据库条目,因为没有侦听器能够处理它。

我可以将侦听器更改为@EventListener以侦听非事务性事件,但在这种情况下,我失去了数据库事件持久性

我希望发布者可以自由决定是否要是事务性/非事务性。无论 Listener 如何,它都必须侦听并执行针对它的事件,并将该事件持久化到 DB 中。

请帮忙!

听者

    @TransactionalEventListener
    public void notificationEvent(ProductEvent event) {
        System.out.println("Listener 1 Start");
        System.out.println("Listener 1 End");
    }

发行人

//    @Transactional
    public void publishEvent() {
        System.out.println("Publisher Start");
        ProductEvent productEvent = new ProductEvent("Product A", "THIS IS PRODUCT", 777);
        applicationEventPublisher.publishEvent(productEvent);
        System.out.println("Publisher End");
    }
Spring Spring-Boot 事件 spring-events

评论


答: 暂无答案