Spring Boot启动时能否通过Flyway创建新schema并通过默认数据源连接?
问题根因
Spring Boot默认启动顺序为「初始化数据源并验证连接有效性」→「执行Flyway迁移逻辑」,两个报错的原因分别为:
- 数据源URL指定不存在的
my-schema时,数据源初始化阶段直接校验失败,轮不到Flyway执行建库逻辑 - 数据源URL不指定schema时,Flyway可正常建库,但后续业务逻辑用到的数据库连接没有默认选中对应schema,导致操作报错
解决方案
方案1:配置连接池默认schema(推荐,无额外代码)
保留不带schema的数据源URL,同时配置Hikari连接池自动为新建连接指定默认schema即可,完整配置如下:
# 数据源配置,URL不指定默认schema,避免启动校验失败 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ spring.datasource.username=root spring.datasource.password=***** # 配置Hikari连接池创建连接后自动选中my-schema spring.datasource.hikari.schema=my-schema # JPA配置保持不变 spring.jpa.hibernate.ddl-auto=none # Flyway配置保持不变 spring.flyway.check-location=false spring.flyway.createSchemas=true spring.flyway.schemas=my-schema
方案2:关闭数据源启动连接校验(适用于多schema场景)
如果你需要Flyway创建多个schema,可以关闭数据源启动阶段的连接校验,等Flyway完成建库后再使用连接,配置如下:
# 数据源URL直接指定目标schema spring.datasource.url=jdbc:mysql://127.0.0.1:3306/my-schema spring.datasource.username=root spring.datasource.password=***** # 关闭数据源启动时的连接校验,避免未建库时启动失败 spring.datasource.hikari.initialization-fail-timeout=-1 # JPA配置保持不变 spring.jpa.hibernate.ddl-auto=none # Flyway配置保持不变 spring.flyway.check-location=false spring.flyway.createSchemas=true spring.flyway.schemas=my-schema
内容的提问来源于stack exchange,提问作者Murtaza Hasan
相关产品推荐
相关产品推荐

