Spring @EventListener(ApplicationReadyEvent.class)只启动一个方法?
我正在尝试在SpringBoot项目启动后运行一些方法。我正在使用Spring @EventListener(ApplicationReadyEvent.class)只启动一个方法?,spring,spring-boot,Spring,Spring Boot,我正在尝试在SpringBoot项目启动后运行一些方法。我正在使用@EventListener(ApplicationReadyEvent.class)注释,这些注释位于我希望在项目启动后运行的方法之上。但一次只能开始一种方法。我希望同时启动多个方法。@EventListener(ApplicationReadyEvent.class)的预期行为是否正确?可以放置几个(多个)用@EventListener注释的方法,所有这些方法都将被执行: @Configuration public class
@EventListener(ApplicationReadyEvent.class)
注释,这些注释位于我希望在项目启动后运行的方法之上。但一次只能开始一种方法。我希望同时启动多个方法。@EventListener(ApplicationReadyEvent.class)
的预期行为是否正确?可以放置几个(多个)用@EventListener注释的方法,所有这些方法都将被执行:
@Configuration
public class SampleConfiguration {
@Bean
public SampleBean sampleBean() {return new SampleBean();}
@EventListener
public void onApplicationReadyEvent(ApplicationReadyEvent event) {
System.out.println("Hello");
}
@EventListener
public void onApplicationReadyEvent2(ApplicationReadyEvent event) {
System.out.println("How are you");
}
}
这将在成功启动应用程序上下文时打印“你好”和“你好”
现在,spring确实没有并发调用它们,它解析所有侦听器并按顺序调用它们
如果需要并行执行,可以创建一个侦听器,作为必须并行运行的逻辑任务的“入口点”,并使用线程/线程池执行器并行运行您选择的代码使用@EventListener
注释的方法将执行所有这些方法:
@Configuration
public class SampleConfiguration {
@Bean
public SampleBean sampleBean() {return new SampleBean();}
@EventListener
public void onApplicationReadyEvent(ApplicationReadyEvent event) {
System.out.println("Hello");
}
@EventListener
public void onApplicationReadyEvent2(ApplicationReadyEvent event) {
System.out.println("How are you");
}
}
这将在成功启动应用程序上下文时打印“你好”和“你好”
现在,spring确实没有并发调用它们,它解析所有侦听器并按顺序调用它们
如果需要并行执行,您可以创建一个侦听器,作为必须并行运行的逻辑任务的“入口点”,并使用线程/线程池执行器并行运行您选择的代码您是否尝试在方法上方添加@Async
?
此侦听器是同步调用的。您只需添加@Async
注释即可使其异步。您是否也尝试在方法上方添加@Async
?
此侦听器是同步调用的。您可以通过简单地添加@Async
注释使其异步。您可以通过向@Configuration
类添加以下bean使事件侦听器异步执行
@Bean(name = "applicationEventMulticaster")
public ApplicationEventMulticaster simpleApplicationEventMulticaster() {
SimpleApplicationEventMulticaster eventMulticaster =
new SimpleApplicationEventMulticaster();
eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());
return eventMulticaster;
}
如果定义了自定义的任务执行器
,则应将新的SimpleAsynctaskeExecutor()
替换为自定义任务执行器beanMethod()
,通过将以下bean添加到@配置
类中,可以让事件侦听器异步执行
@Bean(name = "applicationEventMulticaster")
public ApplicationEventMulticaster simpleApplicationEventMulticaster() {
SimpleApplicationEventMulticaster eventMulticaster =
new SimpleApplicationEventMulticaster();
eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());
return eventMulticaster;
}
如果已定义自定义的任务执行器
,则应将新的SimpleAsyncTaskExecutor()
替换为自定义任务执行器beanMethod()