我有一个连接到MySQL数据库的Sping Boot 应用程序。我计划将应用程序上传到云,我担心数据库设置。我希望确保我的数据库配置防止数据库丢失,引入新表时出错,或修改现有表。
我想知道是否有人可以提供有关在云中为Sping Boot 应用程序配置数据库的最佳实践的指导。具体来说,我想知道以下内容:
- 我应该依赖于JPA和ddl-auto =之类的东西,还是使用某种迁移工具?
- 如何防止有人意外使用create-drop并删除生产数据库?
- 我应该使用配置文件来管理开发、测试和生产的不同配置吗?
任何提示,建议,或最佳实践将不胜感激。提前感谢您的帮助!
1条答案
按热度按时间uurity8g1#
我应该使用ddl-auto=之类的依赖JPA还是使用某种迁移工具?
您应该只使用
spring.jpa.hibernate.ddl-auto=validate
设置,并使用Flyway(tutorial)或Liquibase(tutorial)手动管理数据库结构。通过这种方式,您不会冒Hibernate覆盖现有数据库结构的风险。如何防止有人意外使用create-drop删除生产数据库?
您可以为您的数据库创建两个用户:
springuser
和flywayuser
。虽然flywayuser
被授予对DB方案中所有对象的所有权限,但springuser
仅被授予对表内容和序列的读写访问权限,而没有更改DB结构的权限。Postgres示例:然后,您可以为
application.yml
中的用户指定不同的凭据:这同样适用于Liquibase,请查看文档中的可用配置属性。
开发、测试、生产的不同配置需要使用配置文件管理吗?
如果您在
application.yml
中使用占位符(如上面的示例),则不需要特定于云的配置文件。您只需要确保环境变量在运行应用的操作系统上可用,例如在Kubernetes中通过deployment & config map / secret。然而,对于
local
和test
,我建议使用application-local.yml
和application-test.yml
的额外配置文件以简化开发。您希望其他开发人员尽可能轻松地开始使用您的代码,并且必须配置几个环境变量以便能够在本地启动应用程序是不切实际的。