1、简介
spring boot 项目启动时可以配置一些参数,我们可以通过实现 ApplicationRunner 或 CommandLineRunner 接口,并重写 run 方法来获取这些配置,如果项目内定义了多个类实现了这两个类的话,通过 @Order 注解来指定他们的执行顺序。
spring boot 项目可以在启动的时候指定项目运行参数,eg: java -jar --user=wenyl
2、ApplicationRunner
2.1、源码解析
ApplicationRunner 的 run 方法参数是 ApplicationArguments,内部共有五个方法
public interface ApplicationArguments { String[] getSourceArgs(); Set<String> getOptionNames(); boolean containsOption(String name); List<String> getOptionValues(String name); List<String> getNonOptionArgs(); }
我们添加启动参数如下
getSourceArgs()以空格为分隔符,获取所有配置,并且以字符串形式返回
getOptionNames()方法用于获取配置项(配置项以--开头)的名称,这个方法返回的值是 set 集合,应为一个配置项的值,可能是数组,需要分开定义但是 name 都是同一个
getOptionValues()方法用于获取配置项的值,返回的是一个数组,意味着我们可以给同一个配置项定义不同的值,如我们添加的 name 属性,定义了两个值
getNonOptionArgs()方法用于获取费配置项参数,在测试用的配置中,有个 hello 参数是没有--前缀的获取到的也只有它
2.2、案例
@Component public class MessageApplicationRunner1 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("开始加载"); List<String> nonOptionArgs = args.getNonOptionArgs(); Set<String> optionNames = args.getOptionNames(); for(String optionName:optionNames){ System.out.println("参数-"+optionName+" 值:"+ args.getOptionValues(optionName)); } String[] sourceArgs = args.getSourceArgs(); System.out.println("结束加载"); } }
3、CommandLineRunner
CommandLineRunner 没有 ApplicationRunner 那么多操作,只是以空格为分隔,截取配置,2.1 中同样的配置,获取情况如下
@Component public class MessageApplicationRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println(args); } }
4、ApplicationRunner 和 CommandLineRunner 的区别
ApplicationRunner 的 run 方法的参数是 ApplicationArguments,而 CommandLineRunner 的 run 方法的参数是 String 类型
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于