一、命令行参数使用
执行java -jar
命令时可以传递参数覆盖 Spring Boot 应用中同名配置参数,参数形式包括:
- 选项参数
选项参数位于java -jar xxx.jar --参数名=参数值
xxx.jar
后,如果放在xxx.jar
前会抛出以下异常:Unrecognized option: --参数名=参数值 Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
- 非选项参数
java -jar xxx.jar 参数1 参数2
- 系统参数
系统参数位于java -jar -D参数名=参数值 xxx.jar
java -jar
后、xxx.jar
前,如果系统参数位于xxx.jar
后,虽然启动不会报错,但参数也不会生效。
二、命令行参数获取
Spring Boot 提供ApplicationArguments
获取选项参数和非选项参数。
package com.example.demo;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.boot.ApplicationArguments;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
@Resource
private ApplicationArguments arguments;
@PostConstruct
public void postConstruct() {
// 未经处理的原始参数数组
String[] sourceArgs = arguments.getSourceArgs();
Stream.of(sourceArgs).forEach(System.out::println);
// 选项参数
Set<String> optionArgNames = arguments.getOptionNames();
optionArgNames.forEach(name -> System.out.println(name + "=" + arguments.getOptionValues(name)));
// 非选项参数
List<String> nonOptionArgs = arguments.getNonOptionArgs();
nonOptionArgs.forEach(System.out::println);
}
}
执行java -jar .\demo-0.0.1-SNAPSHOT.jar ABC 123 XYZ --x=0 --y=1 --z=-1
命令的输出结果如下:
ABC
123
XYZ
--x=0
--y=1
--z=-1
x=[0]
y=[1]
z=[-1]
ABC
123
XYZ