在 Java 中,Spring 无需任何脚本即可维护数据库
Posted
技术标签:
【中文标题】在 Java 中,Spring 无需任何脚本即可维护数据库【英文标题】:In Java, Spring maintaining database without any scripts 【发布时间】:2019-12-09 18:46:55 【问题描述】:我正在开发一个 Java 项目(使用 Spring Boot、Thymeleaf、Hibernate、JPA、mysql)。每次我创建一个新的模型类时,我都必须在数据库中创建一个表,或者如果我对模型类进行任何更改,我必须自己更改表。有什么办法可以避免这个数据库相关的东西。例如,我将创建模型类并声明它们的关系,我的数据库表将自动生成。将来,如果我对我的类进行任何更改,它们将自动应用于数据库而不会丢失任何数据。
之前我在 php,Laravel 工作过。我需要做的就是1)运行命令php artisan make:migration create_posts_table
,2)声明$table->string('title');
,$table->foreign('user_id')->references('id')->on('users');
等列,然后3)运行命令php artisan migrate
。而已。不需要 SQL 脚本。我想知道Java,Spring是否有这样的东西。
【问题讨论】:
实际上,我认为自动生成数据库是不好的做法,仅仅是因为您对约束名称没有/有限的控制。此外,当更改投入生产时,您只能确定,如果您手动执行,数据库不会以任何方式损坏 另外this answer 解释了spring.jpa.hibernate.ddl-auto=update
的作用
@XtremeBaumer 谢谢。我以前看过这个答案。但不建议在生产中使用。这就是为什么我一直在寻找其他选择。所以如果我在开发中使用spring.jpa.hibernate.ddl-auto=update
并从生产中删除,那么对项目进行了一些修改,如何将修改应用于生产部分?
【参考方案1】:
当然可以。
在您的 application.properties 中使用 spring.jpa.hibernate.ddl-auto=update
。
您还可以使用更高级的工具,例如https://www.liquibase.org/
【讨论】:
【参考方案2】:理想方式
spring.jpa.hibernate.ddl-auto=none
在我看来,理想的方法是创建一个 SQL 文件,它会在启动时为我们创建架构。
让 Spring Boot 为你创建它
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.ddl-auto= # DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto" property. Defaults to "create-drop" when using an embedded database and no schema manager was detected. Otherwise, defaults to "none".
其他可能的值:create、create-drop、validate
More Detailed Explanation
【讨论】:
【参考方案3】:您可以使用 Flyway 进行迁移,它类似于 Laravel 迁移。
添加依赖项并将您的迁移 SQL 文件放入 classpath:db/migration。 Flyway 将自动检查 sql 文件版本并应用任何待处理的迁移。
https://flywaydb.org/documentation/plugins/springboot
【讨论】:
以上是关于在 Java 中,Spring 无需任何脚本即可维护数据库的主要内容,如果未能解决你的问题,请参考以下文章