ApplicationRunner执行顺序问题
作用:ApplicationRunner是Spring Boot提供的一个接口,主要用于在Spring应用完全启动后执行特定的初始化任务或逻辑,例如数据库初始化、配置文件加载、缓存预热等。
具体用法这里就不做详细介绍了。
当我们有多个ApplicationRunner,并且需要严格控制执行顺序的时候,可以使用注解:
@Order(9) // 数值越小执行顺序越靠前
示例,我们写3个ApplicationRunner,加上@Order()注解,然后启动项目观察执行顺:
第一个:
@Slf4j
@Order(1) // 数值越小执行顺序越靠前
@Component
public class ARunner implements ApplicationRunner {/*** 项目启动成功后执行* @param args*/@Overridepublic void run(ApplicationArguments args) {log.info("项目启动成功,执行任务A");try {}catch (Exception e){log.error("执行错误.", e);}}
}
第二个:
@Slf4j
@Order(99) // 数值越小执行顺序越靠前
@Component
public class BRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) {log.info("项目启动成功,执行任务B");try {}catch (Exception e){log.error("执行错误.", e);}}
}
第三个:
@Slf4j
@Order(9) // 数值越小执行顺序越靠前
@Component
public class CRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) {log.info("项目启动成功,执行任务C");try {}catch (Exception e){log.error("执行错误.", e);}}
}
执行结果:可以看到,执行顺序就是按照@Order()注解来执行的,数值越小执行顺序越靠前。