前言:
我们在开发当中需要从启动类里面获取到自己在业务当中需要使用的参数,具体怎么获取看实际业务,接下来介绍一下获取相关。
1、设置启动参数
在idea的这个位置可以设置便于我们测试查看数据。
我的设置是这个。
--Mygroup=a,b --testpath=d:/data/1.txt -testargs=2 testNoArg TestNoarg2=3
2、获取ApplicationArguments数据
@Component
@Slf4j
public class ArgsBean {
//ApplicationArguments里面 --xxx=test 是--key=value格式
//@Value("${xxx}")可以将value取出来
@Value("${testpath}")
private String testpath;
// @Value("${TestNoarg2}")
// private String TestNoarg2;
@Resource
private ApplicationArguments arguments;
@PostConstruct
public void run() {
//查看--key=value格式格式是否可以正确取值
log.info("++++++++++++++++++++{}",testpath);
// log.info("--------------------{}",TestNoarg2);
// 判断从参数中解析的 option 参数是否包含指定名称的选项
boolean debug = arguments.containsOption("testargs");
log.warn("containsOption debug is:{}", debug);
// 获取args中的所有 non option 参数 获得不是 -- 开头的参数
List<String> nonOptionArgs = arguments.getNonOptionArgs();
log.warn("getNonOptionArgs :{}", nonOptionArgs);
log.warn("非选项参数数量:{}",arguments.getNonOptionArgs().size());
// 获取args中所有的 option参数的name,即取得 -- 开头的参数的key
Set<String> optionNames = arguments.getOptionNames();
log.warn("getOptionNames:{}", optionNames);
log.warn("选项参数数量{}",arguments.getOptionNames().size());
for (String optionName : optionNames) {
List<String> optionValues = arguments.getOptionValues(optionName);
log.warn("{}对应的getOptionValues:{}",optionName, optionValues);
}
// 获取传递给应用程序的原始未处理参数,所有的参数
String[] sourceArgs = arguments.getSourceArgs();
for (String sourceArg : sourceArgs) {
log.warn("这是传过来sourceArgs[{}]", sourceArg);
}
}
}
这个是ApplicationArguments里面的相关数据,具体细节下面讲解。
2.1自定义参数
利用@Value("${xxx}")这个注解,可以获取到启动类自己定义的参数,赋值的时候是
--key = value 的格式,所以取值的时候用@Value("${xxx}")即可。
但是注意,像上文在idea设置的启动参数
这个截图的参数就不能获取,如果利用@Value("${xxx}")注解获取值会报错!
下面这个例子是“--testpath”格式,所以可以获取
2.2 所有参数
我们可以做如:
判断从参数中解析的 option 参数是否包含指定名称的选项;
获取args中的所有 non option 参数 获得不是 -- 开头的参数
获取args中所有的 option参数的name,即取得 -- 开头的参数的key
获取传递给应用程序的原始未处理参数,所有的参数
3、调用
在启动类调用刚才写的测试方法就行。
4、测试数据
以上,就是启动类获取ApplicationArguments里面的数据,然后根据具体业务去找对应的方法!