Spring Boot 如何在Sping Boot 应用程序中配置数据库以进行云和本地开发?

cgvd09ve  于 2023-03-23  发布在  Spring
关注(0)|答案(1)|浏览(146)

我有一个连接到MySQL数据库的Sping Boot 应用程序。我计划将应用程序上传到云,我担心数据库设置。我希望确保我的数据库配置防止数据库丢失,引入新表时出错,或修改现有表。
我想知道是否有人可以提供有关在云中为Sping Boot 应用程序配置数据库的最佳实践的指导。具体来说,我想知道以下内容:

  • 我应该依赖于JPA和ddl-auto =之类的东西,还是使用某种迁移工具?
  • 如何防止有人意外使用create-drop并删除生产数据库?
  • 我应该使用配置文件来管理开发、测试和生产的不同配置吗?

任何提示,建议,或最佳实践将不胜感激。提前感谢您的帮助!

uurity8g

uurity8g1#

我应该使用ddl-auto=之类的依赖JPA还是使用某种迁移工具?

您应该只使用spring.jpa.hibernate.ddl-auto=validate设置,并使用Flywaytutorial)或Liquibasetutorial)手动管理数据库结构。通过这种方式,您不会冒Hibernate覆盖现有数据库结构的风险。

如何防止有人意外使用create-drop删除生产数据库?

您可以为您的数据库创建两个用户:springuserflywayuser。虽然flywayuser被授予对DB方案中所有对象的所有权限,但springuser仅被授予对表内容和序列的读写访问权限,而没有更改DB结构的权限。Postgres示例:

-- Connection rights
grant connect on database mydb TO flywayuser, springuser;

-- Schema rights
create schema if not exists myschema;
grant all privileges on schema myschema to flywayuser;
grant usage on schema myschema to springuser;

-- Sequence rights
grant all privileges on all sequences in schema myschema to flywayuser, springuser;

-- Table rights
grant all privileges on all tables in schema myschema to flywayuser;
grant select, insert, update, delete on all tables in schema myschema to springuser;

然后,您可以为application.yml中的用户指定不同的凭据:

spring:
  datasource:
    username: ${DB_USER}
    password: ${DB_PASSWORD}
  flyway:
    schemas: myschema
    user: ${FLYWAY_DB_USER}
    password: ${FLYWAY_DB_PASSWORD}

这同样适用于Liquibase,请查看文档中的可用配置属性。

开发、测试、生产的不同配置需要使用配置文件管理吗?

如果您在application.yml中使用占位符(如上面的示例),则不需要特定于云的配置文件。您只需要确保环境变量在运行应用的操作系统上可用,例如在Kubernetes中通过deployment & config map / secret。
然而,对于localtest,我建议使用application-local.ymlapplication-test.yml的额外配置文件以简化开发。您希望其他开发人员尽可能轻松地开始使用您的代码,并且必须配置几个环境变量以便能够在本地启动应用程序是不切实际的。

相关问题