当前位置: 首页 > 图灵资讯 > 技术篇> 弹簧 - :命令行 - arguments-overview

弹簧 - :命令行 - arguments-overview

来源:图灵教育
时间:2025-02-10 14:07:33

弹簧 - :命令行 -  arguments-overview

Spring Boot 该应用程序的强大之处在于其灵活运行时的配置能力,命令行参数是实现该能力的关键。本文将深入探讨如何处理它 Spring Boot 在不修改代码的情况下,使用命令行参数覆盖默认设置或添加自定义参数。

一、传递命令行参数

向 Spring Boot 传递命令行参数的方法取决于您的操作模式:

  • 可执行 JAR 包: 运行包装后 JAR 直接在文件中 JAR 添加文件名后的参数:

java -jar myapp.jar --server.port=8081 --custom.argument=value

  • Maven 插件: 使用 Spring Boot Maven 使用插件时 -Dspring-boot.run.arguments 属性传递参数:

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081,--custom.argument=value"

  • Gradle 插件: 在 build.gradle 文件中配置 bootRun 任务,然后操作:

./gradlew bootRun --args="--server.port=8081,--custom.argument=value"

二、在应用代码中访问命令行参数

Spring Boot 访问命令行参数提供两个接口:

  • CommandLineRunner 接口: 这个接口允许你在那里 Spring 加载容器后执行代码,访问命令行参数:

@SpringBootApplication
public class MyApp implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        for (String arg : args) {
            System.out.println(arg);
        }
    }
}

  • ApplicationRunner 接口: 与 CommandLineRunner 类似,但提供 ApplicationArguments 接口,用于更结构化的参数访问:

@SpringBootApplication
public class MyApp implements ApplicationRunner {

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        if (args.containsOption("custom.argument")) {
            System.out.println("Custom argument: " + args.getOptionValues("custom.argument"));
        }
    }
}

这两种方法都可以处理选项参数(例如) --custom.argument=value)和非选项参数。

三、覆盖应用属性

可以覆盖命令行参数 application.properties 或 application.yml 文件中定义的属性。例如,修改服务器端口:

  • 命令行: java -jar myapp.jar --server.port=8081
  • Maven: mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081"

命令行的参数优先级最高,以确保其覆盖其他配置。

四、禁止命令行属性转换

Spring Boot 默认情况下,将命令行参数转换为属性并添加 Spring 在环境中。如有必要禁止此行为,可在主类中设置:

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApp.class);
        app.setAddCommandLineProperties(false);
        app.run(args);
    }
}

这样可以防止在环境中添加命令行参数。

(参考:Baeldung, Spring Boot 官方文档)

以上是弹簧 - :命令行 - arguments-有关overview的详细信息,请关注图灵教育的其他相关文章!