我正在尝试在 Spring Boot 项目启动后运行一些方法。我在项目启动后要运行的方法上方使用 @EventListener(ApplicationReadyEvent.class)
注释。但它一次只从一种方法开始。我想同时启动多种方法。这是 @EventListener(ApplicationReadyEvent.class)
的预期行为吗?
@EventListener(ApplicationReadyEvent.class) 只启动一种方法?
答案:
您可以通过将以下 bean 添加到您的 @Configuration
类来让事件侦听器异步执行。
@Bean(name = "applicationEventMulticaster")
public ApplicationEventMulticaster simpleApplicationEventMulticaster() {
SimpleApplicationEventMulticaster eventMulticaster =
new SimpleApplicationEventMulticaster();
eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());
return eventMulticaster;
}
如果你定义了一个自定义的 TaskExecutor
那么你应该用 new SimpleAsyncTaskExecutor()
替换 yourCustomTaskExecutorBeanMethod()
可以放置几个(多个)用
@EventListener
注释的方法,所有这些方法都将被执行:这将在应用程序上下文成功启动时打印“Hello”和“How are you”。
现在,spring 确实不会同时调用它们,它解析所有侦听器并按顺序调用它们。
如果您需要并行执行,您可以创建一个侦听器,作为必须并行运行的逻辑任务的“入口点”,并使用线程/线程池执行器并行运行您选择的代码