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

SpringBoot 2.5.3升级后spring.sql.init.schema-locations配置失效如何解决

SpringBoot 2.5+ spring.sql.init.schema-locations 配置失效解决方案

SpringBoot 2.5版本开始,原spring.datasource.schema、spring.datasource.data等数据库初始化配置正式迁移到spring.sql.init命名空间下,你遇到的配置失效可按以下优先级排查解决:

1. 补充初始化执行模式配置

spring.sql.init.mode默认值为embedded,仅对未引入第三方连接池的纯嵌入式数据库(如H2)自动执行初始化。你项目中使用了Druid连接池,会被识别为非嵌入式数据库场景,需要手动指定执行模式:

spring:
  sql:
    init:
      mode: always # 新增该配置,强制执行初始化脚本
      schema-locations: classpath:sql/create_table_h2.sql

参数说明:always表示始终执行初始化,embedded仅嵌入式数据库执行,never禁用初始化

2. 解决全局懒加载冲突

你当前配置开启了spring.main.lazy-initialization=true全局懒加载,会导致SQL初始化相关的Bean被延迟实例化,无法在项目启动阶段执行SQL脚本,可增加配置类手动排除SQL初始化Bean的懒加载:

import org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@ConditionalOnProperty(prefix = "spring.sql.init", name = "mode", havingValue = "always")
@Import(SqlInitializationAutoConfiguration.class)
public class SqlInitConfig {
}

3. 特殊场景排查(Druid连接池适配)

如果以上配置完成后依然不生效,可以临时将spring.datasource.druid.async-init改为false关闭异步初始化,避免连接池初始化晚于SQL脚本执行导致的执行失败。

多SQL脚本配置示例

如果需要执行多个初始化脚本,schema-locations支持数组格式配置:

spring:
  sql:
    init:
      mode: always
      schema-locations:
        - classpath:sql/create_table_h2.sql
        - classpath:sql/init_base_data.sql

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:36:02