spring boot2.0后配置自动执行schema.sql无效

在 Spring Boot 2.0 之后,自动执行 schema.sql 文件的机制发生了一些变化,特别是对于默认的数据库初始化行为。以下是详细的解释和解决方法:

变化背景

  1. Spring Boot 2.0 之前

    • 在旧版本中,Spring Boot 默认会自动查找并执行 schema.sqldata.sql 文件。
    • schema.sql 用于定义数据库结构(DDL),data.sql 用于插入初始数据(DML)。
  2. Spring Boot 2.0 及更新版本

    • 从 Spring Boot 2.0 开始,不再默认执行 schema.sqldata.sql
    • 默认情况下,Spring Boot 使用基于 DataSourceInitializer 的方式来初始化数据库。

解决方法

如果希望继续使用 schema.sql 自动初始化数据库结构,可以按以下步骤操作:

  1. 确保配置文件中启用初始化: 在 application.propertiesapplication.yml 中添加配置,以确保启用了初始化功能。

    properties
    spring.datasource.initialization-mode=always

    或者在 YAML 文件中:

    yaml
    spring: datasource: initialization-mode: always

    这将告诉 Spring Boot 始终执行数据库初始化。

  2. 检查文件位置和命名

    • 确保 schema.sql 文件位于 src/main/resources 目录下。
    • 文件名应为 schema.sql,且大小写应正确(在不同操作系统中,文件名的大小写敏感性可能不同)。
  3. 排除其他初始化策略: 如果在项目中有其他初始化数据库的策略,可能会影响 schema.sql 的执行。确保没有其他配置或依赖影响了 Spring Boot 的默认行为。

  4. 日志调试: 如果仍然无法正常执行 schema.sql,可以查看应用程序的日志(例如在控制台或日志文件中)来查找任何与数据库初始化相关的错误或警告消息。

注意事项

  • 版本兼容性:确保所使用的 Spring Boot 版本与相关依赖版本兼容,以避免可能存在的配置问题。
  • 数据库连接:确保应用程序能够正常连接到配置的数据库,并且数据库用户有执行 DDL 操作的权限。

通过上述步骤,应该能够解决在 Spring Boot 2.0 及更新版本中 schema.sql 自动执行无效的问题,并确保数据库结构能够按预期初始化。