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,这样即使有异常也不会影响主应用的启动