java如何在不同的环境(开发、测试、生产)中维护相同的数据表?
作为开发人员,如果我在开发数据库中做了任何更改,我必须复制脚本,并在用于测试和生产的2个数据库上手动执行它。 有没有办法让它自动化? 我正在使用java、mysql和spring mvc。 我们不允许对生产数据库进行任何更改
你可以在下面搜索框中键入要查询的问题!
作为开发人员,如果我在开发数据库中做了任何更改,我必须复制脚本,并在用于测试和生产的2个数据库上手动执行它。 有没有办法让它自动化? 我正在使用java、mysql和spring mvc。 我们不允许对生产数据库进行任何更改
# 1 楼答案
这是一个通常被称为“数据库迁移”的功能;它被烘焙到一些开发框架中(例如Ruby on Rails),但在Spring MVC中没有
最简单的方法是使用tool integrated into your build and deploy scripts-Flyway是流行的
其原理是:将数据库更改放入脚本中,并使用一个命名约定来指示它们的执行顺序,然后在尝试更新的环境中运行这些脚本。每个数据库都知道最后运行的迁移脚本是哪一个,所以您可以从中断的地方重新开始
例如:
一旦你运行它,它将为你的用户创建一个新表
这会向表中添加一个额外的列
如果您按顺序运行这两个,它们将从头开始创建数据库。如果您已经在测试中运行了“create”脚本,但还没有运行“alter”脚本,那么下次在测试中运行迁移时,它将知道不要重新运行create脚本,而是使用alter脚本
在一篇评论中,您说不允许在生产中执行表更改——我想您的意思是,这需要一些人工过程(例如,询问DBA)。在本例中,您遇到了一点问题,因为“迁移”过程需要维护数据库发生的最后一次更改,这是由工具保证的。人类往往会犯错。。。Flyway是通过migration history tables.
最好的选择是与ops/dba团队合作,看看是否可以使用Flyway直接部署到生产环境。如果这太难,你可以创建一个“pre-prod”数据库,并将其用作生产的镜像;将迁移应用于该环境,然后将迁移发送给生产所有者。你可以通过Jenkins或任何你正在使用的工具来实现自动化
# 2 楼答案
您可以通过使用liquibase编程实现这一点
你可以参考这里liquibase example