SpringBoot -- 03 -- 启动加载类ApplicationRunner的使用
在使用 SpringBoot 的过程中,我们有时候会需要在容器启动后做一些初始化的工作,这时候 ApplicationRunner 就派上用场了一、示例我们需要定义一个类来实现 ApplicationRunner 接口,并覆盖其 run() 方法,同时将其注册为 bean 对象application.ymlserver:port: 9999MyApplicationR...
相关文章:
在使用 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 端口改为了 8888 -
ApplicationArguments 类一个有五个方法,如下所示
方法 作用 getSourceArgs() 获取参数源 getOptionNames() 获取所有参数名称 containsOption(String name) 判断是否包含指定名称的参数 getOptionValues(String name) 根据参数名称来获取指定参数 getNonOptionArgs() 获取所有不是参数的配置项
-
-
更多推荐
所有评论(0)