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

Spring Boot 2.7.17+Gradle+jOOQ生成代码时H2精度错误求助

问题:Spring Boot 2.7.17 结合 jOOQ Gradle 插件生成代码时出现 H2 精度错误

场景描述

为修复旧版本CVE漏洞升级到Spring Boot 2.7.17,执行gradlew generateJooq命令时触发H2数据库错误:

Precision("2147483647")必须在1到1000000000之间

Spring Boot 2.6.0版本下执行相同操作无此问题。

原因分析

Spring Boot 2.7.x默认升级了H2数据库版本(从2.6.x的1.4.x系列升至2.1.x及以上),H2 2.x对数值类型的精度限制更严格,而jOOQ在生成代码时,可能将部分字段(比如对应Java Integer类型的数据库字段)的精度设置为2147483647,刚好超过H2 2.x允许的最大值(1000000000),从而触发报错。

解决思路

  • 调整jOOQ生成配置,限制精度范围
    在build.gradle的jOOQ插件配置中,针对出现问题的字段设置精度映射,或全局调整H2的精度处理规则:

    jooq {
        configurations {
            main {
                generator {
                    database {
                        // 针对特定字段强制设置精度
                        forcedTypes {
                            forcedType {
                                name = "INTEGER"
                                expression = ".*your_problem_column.*" // 替换为实际出问题的字段名
                                precision = 10
                            }
                        }
                        // 全局设置H2允许的最大精度
                        properties {
                            property {
                                key = "org.jooq.meta.h2.H2Database.maxPrecision"
                                value = "1000000000"
                            }
                        }
                    }
                }
            }
        }
    }
    
  • 降级H2数据库版本到兼容版
    若暂时无法调整jOOQ配置,可在build.gradle中强制指定H2版本为Spring Boot 2.6.x使用的旧版本(如1.4.200):

    dependencies {
        constraints {
            implementation("com.h2database:h2") {
                version = "1.4.200"
            }
        }
    }
    

    注意:降级H2可能引入其他兼容性风险,需完成充分测试。

  • 修正数据库DDL脚本中的字段定义
    检查你的DDL脚本,确认是否存在精度超过1000000000的字段定义(比如DECIMAL(2147483647, 0)这类不合理设置),直接修正为符合H2 2.x要求的精度值(例如DECIMAL(18, 0))。

  • 升级jOOQ版本到兼容Spring Boot 2.7.x的最新版
    Spring Boot 2.7.x默认的jOOQ版本可能存在与H2 2.x的兼容性问题,尝试升级jOOQ到更高版本(如3.18+),在build.gradle中覆盖版本:

    ext {
        set('jooqVersion', '3.18.6')
    }
    

    升级前需确认jOOQ版本与Spring Boot 2.7.x的兼容性,可参考官方依赖版本矩阵。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:14:49