这篇文章主要介绍了SpringBoot中的ApplicationRunner与CommandLineRunner问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
概述
开发中可能会有这样的场景,需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。
SpringBoot给我们提供了两个接口来帮助我们实现这种需求。
两个启动加载接口分别是:
CommandLineRunner
ApplicationRunner
他们的执行时机是容器启动完成的时候。
实现启动加载接口
这两个接口中有一个run方法,我们只需要实现这个方法即可。这个两个接口的不同之处在于:
ApplicationRunner中的run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。
ApplicationRunner接口的示例
package com.jdddemo.demo.controller;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
@Order(value = 1)
public class JDDRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(args);
System.out.println("这个是测试ApplicationRunner接口");
}
}
执行结果如下:
CommandLineRunner接口示例
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class TestCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("<这个是测试CommandLineRunn接口");
}
}
CommandLineRunner和ApplicationRunner的执行顺序
在spring boot程序中,我们可以使用不止一个实现CommandLineRunner和ApplicationRunner的bean。
为了有序执行这些bean的run()方法,可以使用@Order注解或Ordered接口。
下面例子中创建了两个实现CommandLineRunner接口bean和两个实现ApplicationRunner接口的bean。
我们使用@Order注解按顺序执行这四个bean
CommandLineRunnerBean1.java
@Component
@Order(1)
public class CommandLineRunnerBean1 implements CommandLineRunner {
@Override
public void run(String... args) {
System.out.println("CommandLineRunnerBean 1");
}
}
ApplicationRunnerBean1.java
@Component
@Order(2)
public class ApplicationRunnerBean1 implements ApplicationRunner {
@Override
public void run(ApplicationArguments arg0) throws Exception {
System.out.println("ApplicationRunnerBean 1");
}
}
CommandLineRunnerBean2.java
@Component
@Order(3)
public class CommandLineRunnerBean2 implements CommandLineRunner {
@Override
public void run(String... args) {
System.out.println("CommandLineRunnerBean 2");
}
}
ApplicationRunnerBean2.java
@Component
@Order(4)
public class ApplicationRunnerBean2 implements ApplicationRunner {
@Override
public void run(ApplicationArguments arg0) throws Exception {
System.out.println("ApplicationRunnerBean 2");
}
}
输出结果为:
CommandLineRunnerBean 1
ApplicationRunnerBean 1
CommandLineRunnerBean 2
ApplicationRunnerBean 2
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。
本文标题为:SpringBoot中的ApplicationRunner与CommandLineRunner问题


基础教程推荐
- 全局记录Feign的请求和响应日志方式 2023-01-09
- JVM分析之类加载机制详解 2023-04-06
- Project Reactor源码解析publishOn使用示例 2023-04-12
- Java File类的概述及常用方法使用详解 2023-05-18
- Java去掉小数点后面无效0的方案与建议 2023-02-18
- Java使用EasyExcel进行单元格合并的问题详解 2023-01-18
- 工厂方法在Spring框架中的运用 2023-06-23
- SpringBoot配置文件中密码属性加密的实现 2023-03-11
- 一文了解Java 线程池的正确使用姿势 2023-06-17
- 用java实现扫雷游戏 2022-12-06