spring boot 读取项目参数配置

问尤龙の时光 该配合你演出的我,却视而不见。。 本文由博客端 http://www.wenyoulong.com 主动推送

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();
}

我们添加启动参数如下

image.png

getSourceArgs()以空格为分隔符,获取所有配置,并且以字符串形式返回

image.png

getOptionNames()方法用于获取配置项的名称,配置项以--开头

image.png

getOptionValues()方法用于获取配置项的值,返回的是一个数据,意味着我们可以给同一个配置项定义不同的值,如我们添加的 name 属性,定义了两个值,这也是为什么 getOptionNames()返回的值是 set 集合,就是为了过滤相同的 name

image.png

getNonOptionArgs()方法用于获取费配置项参数,在测试用的配置中,有个 hello 参数是没有--前缀的获取到的也只有它

image.png

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 中同样的配置,获取情况如下

image.png

@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 类型

image.pngimage.png

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    895 引用 • 1443 回帖 • 560 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2989 引用 • 8141 回帖 • 594 关注
  • 开发
    32 引用 • 156 回帖 • 1 关注

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...