Spring Boot 配置(四)命令行参数

647 阅读1分钟

一、命令行参数使用

执行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