在 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 无需任何脚本即可维护数据库的主要内容,如果未能解决你的问题,请参考以下文章

spring boot入门之——热部署

无需 unicode 转义即可读写 Java 属性

IT运维公司内网服务器可以远程桌面连接吗?怎么连接?

无需用户登录即可保护 Spring Boot 应用程序

用于 C/C++/java 的平台无关代码,无需额外的包

sh Laravel Forge无需停机即可部署脚本