SpringBoot -- 03 -- 启动加载类ApplicationRunner的使用
在使用 SpringBoot 的过程中,我们有时候会需要在容器启动后做一些初始化的工作,这时候 ApplicationRunner 就派上用场了
一、示例
我们需要定义一个类来实现 ApplicationRunner 接口,并覆盖其 run() 方法,同时将其注册为 bean 对象
-
application.yml
server: port: 9999 -
MyApplicationRunner.java
@Component public class MyApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("I am MyApplicationRunner"); } } // I am MyApplicationRunner
当初始化工作比较多的时候,我们可能会创建多个类来实现 ApplicationRunner 接口,这时候我们可以通过 @Order 注解来决定执行的先后顺序
-
MyApplicationRunner1.java
@Component @Order(value = 1) public class MyApplicationRunner1 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("I am MyApplicationRunner1"); } } -
MyApplicationRunner2.java
@Component @Order(value = 2) public class MyApplicationRunner2 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("I am MyApplicationRunner2"); } } // I am MyApplicationRunner1 // I am MyApplicationRunner2
二、解析
在使用过程中,我们会发现 run() 方法中带有一个 ApplicationArguments 参数,它的主要目的在于保存启动时加入的额外参数
-
设置参数

如上所示,设置了启动项目时的额外参数
--server.port=8888 spring -
MyApplicationRunner.java
@Component public class MyApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println(args.containsOption("server.port")); System.out.println(args.getOptionValues("server.port")); System.out.println(JSON.toJSONString(args)); } } // true // [8888] // {"nonOptionArgs":["spring"],"optionNames":["server.port"],"sourceArgs":["--server.port=8888","spring"]}由上可知,我们可以很清楚地看到 ApplicationArguments 中各个方法的作用了,通过
--server.port=8888参数,我们将原来项目的 9999 端口改为了 8888ApplicationArguments 类一个有五个方法,如下所示
-
getSourceArgs()
- 获取参数源
-
getOptionNames()
- 获取所有参数名称
-
containsOption(String name)
- 判断是否包含指定名称的参数
-
getOptionValues(String name)
- 根据参数名称来获取指定的参数
-
getNonOptionArgs()
- 获取不是参数的配置项
-

浙公网安备 33010602011771号