如何实现“spring boot中ContextRefreshedEvent只执行一次”

整体流程

首先我们需要了解ContextRefreshedEvent是Spring容器初始化完成后发布的事件,它会在容器初始化完成后触发,我们可以通过监听这个事件来执行相应的逻辑。但是默认情况下,每次容器刷新都会触发这个事件,我们需要让它只执行一次。下面是整个过程的步骤:

erDiagram
    Event --> Listener: 监听到事件
    Listener --> Logic: 执行逻辑

具体步骤

  1. 创建一个监听器类,实现ApplicationListener接口,重写onApplicationEvent方法。这个方法在容器初始化完成后会被调用,我们可以在这里执行我们的逻辑。
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

public class MyContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 在这里编写需要执行的逻辑
    }
}
  1. 在Spring Boot的配置类中注册这个监听器。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfiguration {
    
    @Bean
    public MyContextRefreshedListener myContextRefreshedListener() {
        return new MyContextRefreshedListener();
    }
}
  1. 在onApplicationEvent方法中添加一个标记,用来表示逻辑是否已经执行过。
private boolean executed = false;

@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
    if (!executed) {
        // 在这里编写需要执行的逻辑
        executed = true;
    }
}

这样,我们就可以确保逻辑只会执行一次。

结尾

通过以上步骤,我们成功实现了在Spring Boot中让ContextRefreshedEvent只执行一次的功能。希望这篇文章对你有所帮助,如果有任何疑问或需要进一步的解释,请随时联系我。祝你在学习和工作中顺利!