在springboot可以有两种方式拿到 ApplicationArguments (应用程序启动参数)
以idea为例设置程序启动参数:
输入参数如下:
参数以空格分隔,– 开头的参数会被解析成Option类型的参数,便于取值
--Mygroup=a,b --filePath=c:/data/1.txt -myargs=2 testNoArg TestNoarg2=3
一、实现 ApplicationRunner 重新run方法
package com.ratel.mongo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.Set;
@Component
@Slf4j
public class ApplicationRunnerImpl implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
Set<String> optionNames = args.getOptionNames();
for (String optionName : optionNames) {
log.info("这是传过来的参数[{}]", optionName);
}
String[] sourceArgs = args.getSourceArgs();
for (String sourceArg : sourceArgs) {
log.info("这是传过来sourceArgs[{}]", sourceArg);
}
}
}
输出结果截图:
二、 注入ApplicationArguments对象
package com.ratel.mongo;
import com.mongodb.util.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Set;
@Component
@Slf4j
public class ApplicationArgumentsTest {
@Autowired
private ApplicationArguments applicationArguments;
@PostConstruct
public void init() {
// 判断从参数中解析的 option 参数是否包含指定名称的选项
boolean debug = applicationArguments.containsOption("debug");
log.warn("containsOption debug is:{}", debug);
// 获取args中的所有 non option 参数 获得不是 -- 开头的参数
List<String> nonOptionArgs = applicationArguments.getNonOptionArgs();
log.warn("getNonOptionArgs :{}", nonOptionArgs);
// 获取args中所有的 option参数的name,即取得 -- 开头的参数的key
Set<String> optionNames = applicationArguments.getOptionNames();
log.warn("getOptionNames:{}", optionNames);
for (String optionName : optionNames) {
List<String> optionValues = applicationArguments.getOptionValues(optionName);
log.warn("{}对应的getOptionValues:{}",optionName, optionValues);
}
// 获取传递给应用程序的原始未处理参数,所有的参数
String[] sourceArgs = applicationArguments.getSourceArgs();
for (String sourceArg : sourceArgs) {
log.warn("这是传过来sourceArgs[{}]", sourceArg);
}
}
}
输入结果截图: