欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot 的ComandLineRunner接口(容器在启动时需要加载的操作)及遇到的坑

程序员文章站 2022-04-18 13:57:58
...

应用程序开发过程中,往往我们需要在容器启动的时候执行一些操作。Spring Boot中提供了CommandLineRunner和ApplicationRunner两个接口来实现这样的需求。
例如在启动应用时,我们需要start一些线程,进行定时维护登录信息Token(因为http是无状态的)。

@Component
public class MyThreadRunner implements CommandLineRunner {
private final TokenThread tokenThread;

private final EnterpriseTokenThread enterpriseTokenThread;

@Autowired
public MyThreadRunner(TokenThread tokenThread,EnterpriseTokenThread enterpriseTokenThread) {
    this.tokenThread = tokenThread;
    this.enterpriseTokenThread=enterpriseTokenThread;
}
@Override
public void run(String... args) throws Exception {

  //这里新建线程,为了不影响主应用的启动
    new Thread(tokenThread).start();
    new Thread(enterpriseTokenThread).start();
    //当应用启动时 访问接口文档
    try {
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
}

ComandLineRunner的坑:
这块需要注意的是,启动CommandLineRunner的执行其实是整个应用启动的一部分,如果你在容器的操作不想影响主应用的启动 那么你就重启一个线程new Thread,这样即使有异常也不会影响主应用的启动