「嘉年华观会」SpringBoot命令行启动时参数配置

2024-09-19 11:48:23 浏览数 (1)

SpringBoot命令行启动时参数配置

一、配置方式

1. 参数配置

通过命令行参数来配置Spring Boot应用程序是一种常见的方式。在命令行中,可以使用--<property>=<value>的形式来传递参数。这些参数会被Spring Boot解析并应用到应用程序的配置中。例如,可以使用以下命令启动Spring Boot应用程序:

代码语言:shell复制
java -jar application-name.jar --server.port=8080
2. 配置文件配置

Spring Boot应用程序可以使用默认的配置文件(如application.propertiesapplication.yml),也可以通过自定义的配置文件进行配置。默认的配置文件位于类路径的根目录下,而自定义的配置文件可以通过--spring.config.location命令行参数指定。例如:

代码语言:shell复制
java -jar application-name.jar --spring.config.location=classpath:/application-config.yml

通过参数配置和配置文件配置,可以在运行Spring Boot应用程序时动态地改变应用程序的行为,而无需重新打包应用程序。这使得在不同环境下部署和运行应用程序更加灵活和便捷。

二、配置顺序(由高到低)

在配置信息的加载过程中,若在高优先级配置中和低优先级配置中存在同样的配置信息,则加载高优先级的配置信息。

1. 命令行参数

命令行参数具有最高优先级,可以覆盖配置文件中的属性。例如,--server.port=8080将会覆盖application.properties或其他配置文件中的server.port属性。

2. 操作系统环境变量

Spring Boot会加载操作系统环境变量中以SPRING_为前缀的所有属性。例如,SPRING_PROFILES_ACTIVE=dev将会设置spring.profiles.active属性。

3. 自定义配置文件

可以通过--spring.config.location命令行参数指定自定义的配置文件。这些自定义配置文件可以覆盖默认的配置文件中的属性。

4. 应用配置文件

application.properties或application.yml 这是常规配置文件,包含应用程序的所有默认配置。如果没有其他配置文件指定,这些属性将作为最后的默认值。

三、参数形式

在命令行中,常见的参数可以分为三类:选项参数、非选项参数和系统参数。

  • 选项参数

Spring Boot应用程序可以在命令行中使用双短横线 -- 作为前缀来传递选项参数。这些参数通常用于配置和控制应用程序的行为。使用选项参数时,参数在命令中是位于 xxx.jar 之后的。例如:

代码语言:shell复制
java -jar application-name.jar --server.port=8080
  • 非选项参数

非选项参数直接跟随在Spring Boot应用程序的 xxx.jar 包后面,它们是应用程序的实际参数。这些参数可以根据应用程序的需要进行解析和处理。例如:

代码语言:shell复制
java -jar application-name.jar arg1 arg2
  • 系统参数

Spring Boot应用程序可以在命令行中使用-D选项设置系统参数,用于配置Java虚拟机(JVM)的行为。这些参数是以-D<property>=<value>的形式传递给JVM,可以在应用程序中通过System.getProperty()方法获取。例如:

代码语言:shell复制
java -Dapp.env=dev -jar your-application.jar
代码语言:shell复制
/**
 * @Author: isabener
 * @Date: 2023-08-04
 */
@RestController
@RequestMapping("/arg")
public class ArgumentsController {

    @Autowired
    private ApplicationArguments applicationArguments;

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/getOptionArgs")
    public void getOptionArgs() {
        // 使用ApplicationArguments获取选项参数
        Set<String> optionArgs = applicationArguments.getOptionNames();
        System.out.print("选项参数:");
        optionArgs.forEach(e -> {
            System.out.print(e   applicationArguments.getOptionValues(e)   " ");
        });
        // 使用@value注解获取选项参数
        System.out.println();
        System.out.print("选项参数:"   serverPort);
    }

    @GetMapping("/getNonOptionArgs")
    public void getNonOptionArgs() {
        // 获取非选项参数
        List<String> nonOptionArgs = applicationArguments.getNonOptionArgs();
        System.out.print("非选项参数:");
        nonOptionArgs.forEach(e -> {
            System.out.print(e   " ");
        });
    }

    @GetMapping("/getSystemArgs")
    public void getSystemArgs() {
        // 使用System.get获取系统参数
        String property = System.getProperty("server.port");
        System.out.println("系统参数:"   property);
        // 使用@value获取系统参数
        System.out.println("系统参数:"   serverPort);
    }
}

四、IDEA中参数配置

  • Program arguments(程序参数)

程序参数是在运行程序时,通过命令行传递给主类的参数,并在应用内进行处理,多个参数需要以空格隔开。例如:

代码语言:shell复制
--arg1=value1 --arg2=value2
  • VM options(VM选项)

VM选项是传递给Java虚拟机(JVM)的参数。JVM选项用于配置JVM的运行时行为,包括堆内存大小、垃圾回收策略等。这些参数通常用于调优和优化Java应用程序的性能。一般以-D 、-X 或者-XX 开头,存在多个参数以空格隔开。例如:

代码语言:shell复制
-Dkey1=value1 -Dkey2=value2
  • Environment variables(环境变量)

环境变量是在操作系统级别设置的一组键值对,在运行程序时可以被应用程序访问。例如:

代码语言:shell复制
key1=value1;key2=value2

0 人点赞