我已经实现了这个逻辑
@Component
public class SomeUpdater {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
private ExecutorService executorService;
@PostConstruct
public void init(){
executorService = Executors.newSingleThreadExecutor();
executorService.execute(()->{
//some logic
applicationEventPublisher.publishEvent(new PurposeEvent(this, 5));
});
}
}
@Component
public class SomeClass {
@EventListener
public void update(PurposeEvent purposeEvent){
//update
}
}但我可以从日志中看到,update (PurposeEvent purposeEvent)侦听器的初始化时间晚于applicationEventPublisher.publishEvent(new PurposeEvent(this, 5));方法的调用时间。初始化后如何调用逻辑?我尝试为ContextRefreshedEvent使用@EventListener,但据我所知,它可以被多次调用
发布于 2020-06-03 04:28:04
您可以使用@DependsOn注释,这可以强制Spring容器在使用@DependsOn注释的bean之前初始化一个或多个bean。然后,您将确保在SomeUpdater之前初始化SomeClass。
长期解决方案是:
有用的链接:http://dolszewski.com/spring/running-code-on-spring-boot-startup/ http://javainfinite.com/spring-boot/springboot-applicationreadyevent-applicationfailedevent-contextrefreshedevent/
发布于 2020-06-03 04:30:45
您可以使用spring事件,如下所示:
@EventListener(ApplicationReadyEvent.class)
public void init() {
final ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(() -> {
//some logic
applicationEventPublisher.publishEvent(new PurposeEvent(this, 5));
});
}https://stackoverflow.com/questions/62160549
复制相似问题