You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为需自定义参数注入的Spring Boot控制台应用打包及运行传参

问题原因

构建报错是因为Spring上下文初始化时(包含Maven打包阶段默认执行的单元测试环节)会强制解析${param.date}占位符,你没有在构建阶段的配置中提供该参数值,也没有设置占位符默认值,因此抛出解析失败异常。

解决构建报错方案

你可以根据自身需求选择任意一种方案:

  • 方案1:给占位符添加默认值,仅修改@Value注解写法即可,无需其他改动:
// 写法1:设置固定默认值,运行时不传参就使用默认值
@Value("#{new java.text.SimpleDateFormat('dd-MM-yyyy').parse('${param.date:01-01-2024}')}")
private Date date;

// 写法2:如果要求运行时必须传参,不需要实际默认值,可以留空默认值,构建阶段不会报错,运行时不传才会触发启动失败
@Value("#{new java.text.SimpleDateFormat('dd-MM-yyyy').parse('${param.date:}')}")
private Date date;
  • 方案2:给测试环境配置专用默认参数,在src/test/resources/application.properties中添加测试用的参数值,不会影响生产运行逻辑:
param.date=01-01-2024
  • 方案3:打包时跳过单元测试,执行构建命令时添加跳过测试参数即可:
mvnw package -DskipTests
运行时传参方式

Jar包构建完成后,两种常用传参方式都可以正常注入param.date的值:

  • 方式1:使用Spring Boot专用的命令行参数传值,优先级最高,会覆盖配置文件中的同名配置:
java -jar your-app.jar --param.date=15-08-2024
  • 方式2:使用JVM系统参数传值:
java -Dparam.date=15-08-2024 -jar your-app.jar
优化建议

你可以使用Spring Boot自带的类型转换能力简化代码,无需手动编写SpEL解析日期:

  1. 定义配置属性类:
@ConfigurationProperties(prefix = "param")
public class ParamProperties {
    // Spring Boot会自动按照指定格式将字符串转换为Date类型
    @DateTimeFormat(pattern = "dd-MM-yyyy")
    private Date date;
    // 省略getter、setter方法
}
  1. 在启动类上添加@EnableConfigurationProperties(ParamProperties.class)注解,之后直接注入ParamProperties实例即可读取对应字段。

内容的提问来源于stack exchange,提问作者Logos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:54:04