Spring ApplicationEventListener 未触发事件

问题描述 投票:0回答:1

我在我的服务中使用 Spring

ApplicationEventListener
来执行启动时逻辑。我知道,我可以在方法上使用
@PostConstruct
注释,但是,由于测试逻辑原因,它不能应用于我的代码。这是我的听众:

@Component
@RequiredArgsConstructor
@Slf4j
public class ApplicationStartupListener implements ApplicationListener<ApplicationReadyEvent> {

    private final SubscriptionService subscriptionService;

    @Override
    public void onApplicationEvent(final ApplicationReadyEvent event) {
        subscriptionService.onStart();
    }
}

它不起作用(但

@PostConstruct
确实有效) - 即使我在方法级别或其中有一个断点 - 似乎没有发生
ApplicationReadyEvent
。我尝试用
@EventListener(ApplicationReadyEvent.class)
注解替换该方法,但仍然没有效果。调试模式和事件更改都不起作用,我不知道为什么会发生这种情况。希望得到答案,有任何问题请随时提问:)

spring spring-boot event-listener
1个回答
0
投票

下面是正常工作的堆栈信息。

onApplicationEvent:14, ApplicationStartupListener ()
onApplicationEvent:8, ApplicationStartupListener ()
doInvokeListener:176, SimpleApplicationEventMulticaster (org.springframework.context.event)
invokeListener:169, SimpleApplicationEventMulticaster (org.springframework.context.event)
multicastEvent:143, SimpleApplicationEventMulticaster (org.springframework.context.event)
publishEvent:421, AbstractApplicationContext (org.springframework.context.support)
publishEvent:378, AbstractApplicationContext (org.springframework.context.support)
ready:114, EventPublishingRunListener (org.springframework.boot.context.event)
lambda$ready$6:82, SpringApplicationRunListeners (org.springframework.boot)
accept:-1, 1090171402 (org.springframework.boot.SpringApplicationRunListeners$$Lambda$2028)
forEach:1541, ArrayList (java.util)
doWithListeners:120, SpringApplicationRunListeners (org.springframework.boot)
doWithListeners:114, SpringApplicationRunListeners (org.springframework.boot)
ready:82, SpringApplicationRunListeners (org.springframework.boot)
run:322, SpringApplication (org.springframework.boot)
main:31, Application ()

请检查:

  1. ApplicationStartupListener
    是由Spring Boot创建的。最简单的方法是删除
    @RequiredArgsConstructor
    并添加一个带断点的构造函数,如果执行到这里就意味着创建了。
  2. SpringApplicationRunListeners.ready
    函数处添加断点,确保您的应用程序真正准备好。
© www.soinside.com 2019 - 2024. All rights reserved.