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

Spring @ConfigurationProperties如何同时兼容Long与Double类型?

问题:Spring Boot配置绑定0.5数值失败的解决办法

我的YAML配置文件

collie:
    crontask:
        command: echo ok
        intervalInMinute: 0.5

对应的Java配置类

@Configuration
@ConfigurationProperties(prefix = "collie.crontask")
@Data
public class CronTaskConfig {

    private String command;

    private Long intervalInMinute;

    public void setIntervalInMinute(String intervalInMinute) {
        this.intervalInMinute = Long.parseLong(intervalInMinute);
    }
}

报错信息

Failed to bind properties under 'collie.crontask' to com.xx.union.collie.worker.config.CronTaskConfig$$EnhancerBySpringCGLIB$$e4948fd7:

Property: collie.crontask.intervalinminute
Value: 0.5
Origin: class path resource [application.yaml]:45:23
Reason: For input string: "0.5"

Action:

Update your application's configuration

org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'cronTaskConfig': Could not bind properties to 'CronTaskConfig'

将配置改为intervalInMinute: 1即可正常运行,显然是数值类型不匹配导致的问题,以下是几种解决方式:


方案1:修改setter方法接收浮点类型并转Long

直接调整setter方法的参数类型为Double,再根据业务需求把浮点值转成Long类型(比如取整、转成毫秒/秒等):

@Configuration
@ConfigurationProperties(prefix = "collie.crontask")
@Data
public class CronTaskConfig {

    private String command;

    private Long intervalInMinute;

    // 接收Double类型的配置值,再转成Long
    public void setIntervalInMinute(Double intervalInMinute) {
        // 示例:直接取整,0.5会转成0;如果需要转成秒则用 (long)(intervalInMinute * 60)
        this.intervalInMinute = intervalInMinute.longValue();
    }
}

方案2:调整字段含义,用整数表示时间单位

如果0.5分钟实际对应30秒,可以直接把配置改成整数,同时修改字段名更贴合实际含义,避免浮点转换问题:
YAML配置修改为:

collie:
    crontask:
        command: echo ok
        intervalInSecond: 30

Java类修改为:

@Configuration
@ConfigurationProperties(prefix = "collie.crontask")
@Data
public class CronTaskConfig {

    private String command;

    private Long intervalInSecond;
}

方案3:使用@NumberFormat注解解析数值

如果不想改动字段类型,可借助Spring的@NumberFormat注解实现浮点字符串到Long的转换:

@Configuration
@ConfigurationProperties(prefix = "collie.crontask")
@Data
public class CronTaskConfig {

    private String command;

    @NumberFormat(style = NumberFormat.Style.NUMBER)
    private Long intervalInMinute;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:10:15