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

Spring Boot 2.5.4 R2DBC创建H2表提示Table already exists错误如何解决

问题根因

Spring Boot 2.5.x版本对R2DBC的SQL初始化逻辑做了变更,默认会自动扫描classpath根路径下的schema.sql、data.sql文件并执行。你既保留了默认自动初始化逻辑,又手动注册了ConnectionFactoryInitializer Bean重复执行schema.sql,两次执行无判断的CREATE TABLE语句就会抛出表已存在的错误。
而Spring Boot 2.4.x版本未默认开启R2DBC的SQL自动初始化功能,只有你手动定义的Initializer执行一次,所以不会报错。

解决方案

你可以任选以下一种方案解决:

  • 方案1:删除手动定义的ConnectionFactoryInitializer Bean,直接使用Spring Boot默认的SQL初始化能力即可满足需求。如果需要自定义SQL文件路径等配置,可以在application.properties/application.yml中调整spring.sql.init.*相关参数。
  • 方案2:保留手动定义的Initializer,关闭Spring Boot默认的SQL自动初始化功能,在配置文件中添加如下配置:
    spring.sql.init.mode=never
    
  • 方案3:修改schema.sql中的建表语句,添加IF NOT EXISTS判断,兼容多次执行场景:
    CREATE TABLE IF NOT EXISTS CUSTOMER (id SERIAL PRIMARY KEY, name VARCHAR(255));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:15:03