【问题标题】:Spring Boot schema.sql - drop db schema on restartSpring Boot schema.sql - 重新启动时删除数据库模式
【发布时间】:2018-07-02 05:38:41
【问题描述】:

您好,我使用的是 Spring Boot 1.5.9 版。

当使用 Spring Boot 为 mysql 数据库初始化 schema.sql 时,一切正常,并且数据库模式已成功创建。但在应用程序重新启动时,此schema.sql 脚本再次执行,应用程序无法启动,因为表已经存在。

我在application.properties 中尝试了spring.jpa.hibernate.ddl-auto=create-drop 选项,但它没有任何效果(可能是因为它只适用于我没有使用的Hibernate 实体)

如果数据库不在内存中,是否有办法让 Spring Boot 在每次重启时都从 schema.sql 重新创建架构?

GitHub: https://github.com/itisha/spring-batch-demo/tree/database-input

【问题讨论】:

  • 请出示您的代码
  • 你试过类似spring.jpa.hibernate.ddl-auto=create-update-
  • @Bhushan Uniyal 在描述的底部添加了指向 Github 的链接 @Zorglube create-update 似乎是一个无效的选项,但我尝试了 update,没有帮助(
  • @Bhushan Uniyal github 链接指向错误的分支,刚刚修复,抱歉
  • @ITisha 我已经浏览了你的代码,我认为最好的事情和最佳实践是你需要使用 liquibase 它就像你的代码的 git,Liquibase 是一个开源的数据库独立库,用于跟踪,管理和应用数据库模式更改。 liquibase.org

标签: java mysql spring-boot database-schema


【解决方案1】:

根据documentation,您可以通过将spring.datasource.continue-on-error 属性设置为true 来简单地忽略异常

Spring Boot 启用了 Spring JDBC 的 fail-fast 特性 默认情况下初始化程序,因此如果脚本导致异常 应用程序将无法启动。您可以使用 spring.datasource.continue-on-error。

甚至将spring.datasource.initialize 设置为false 将其关闭

您也可以通过将 spring.datasource.initialize 设置为 false 来禁用初始化。

【讨论】:

  • 谢谢,这可能是我的最佳选择
【解决方案2】:

一种解决方法可能是更改 schema.sql 中的创建语句 来自

 CREATE TABLE test .....

 CREATE TABLE IF NOT EXISTS test ...

使用 IF NOT EXISTS 语句

【讨论】:

    【解决方案3】:

    关闭自动模式创建以避免冲突:在 application.properties 中添加这一行

    spring.jpa.hibernate.ddl-auto=none
    

    【讨论】:

    • 很遗憾这个选项也没有任何作用
    猜你喜欢
    • 1970-01-01
    • 2020-03-13
    • 2016-10-13
    • 2018-06-09
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多