我正在运行一个Spring boot 2.4.3应用程序,我有一个支持事务的mongob 4集群(我使用run-rs在本地运行它)。我也在使用Spring data mongob。我正在尝试为db迁移集成mongock(最新版本-4.3.8),但我面临一个问题,我无法解决。正如我们所知,最新版本的mongock默认使用事务。我有以下更改集,它只是为我的一个实体创建了一个mongob集合。
@ChangeSet(order = "001", id = "initSessionCollection", author = "Hristo")
public void init(MongockTemplate mongockTemplate) {
mongockTemplate.createCollection(Session.class);
}
运行应用程序时,迁移失败,出现以下错误:
2021-04-13 16:36:18.092 WARN 70141 --- [ main] c.g.c.m.d.m.s.v.SpringDataMongoV3Driver : Error in Mongock's transaction
com.github.cloudyrock.mongock.exception.MongockException: Error in method[InitDb.init] : Command failed with error 251 (NoSuchTransaction): 'Given transaction number 1 does not match any in-progress transactions.' on server localhost:27017. The full response is {"errorLabels": ["TransientTransactionError"], "operationTime": {"$timestamp": {"t": 1618320977, "i": 3}}, "ok": 0.0, "errmsg": "Given transaction number 1 does not match any in-progress transactions.", "code": 251, "codeName": "NoSuchTransaction", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1618320977, "i": 3}}, "signature": {"hash": {"$binary": {"base64": "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", "subType": "00"}}, "keyId": 0}}}; nested exception is com.mongodb.MongoCommandException: Command failed with error 251 (NoSuchTransaction): 'Given transaction number 1 does not match any in-progress transactions.' on server localhost:27017. The full response is {"errorLabels": ["TransientTransactionError"], "operationTime": {"$timestamp": {"t": 1618320977, "i": 3}}, "ok": 0.0, "errmsg": "Given transaction number 1 does not match any in-progress transactions.", "code": 251, "codeName": "NoSuchTransaction", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1618320977, "i": 3}}, "signature": {"hash": {"$binary": {"base64": "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", "subType": "00"}}, "keyId": 0}}}
如果我按预期禁用mongock事务,则迁移将成功应用。我不想为db迁移禁用事务,但我不知道问题出在哪里。
编辑:我发现了问题所在,因为Spring boot支持多文档事务,而在此类事务中不支持create collection命令。但是,我应该如何处理集合的创建?
正如您所提到的,MongoDB事务模型有一些限制。请参阅MongoDB官方文档。
考虑到这一点,您无法将该操作包装在事务中,因此如果您使用的是事务,则无法在标准ChangeLog中使用它。
然而,好消息是,Mongock团队一如既往地考虑了这一点,并将为预交易操作提供一种机制。
我们预计6月左右会有一个发布候选版本。但是,如果这是紧急需要,请向我们发送电子邮件至dev@cloudyrock.io
我们将尝试找到解决方案。
我试图运行mongock来处理版本控制的DB迁移,但mongock基础设施出现了一个异常,还请注意,我没有使用spring boot,只有spring bean系统,我没有选择使用spring boot。。。 Pom和代码段: 代码: Mongo模板按其应有的方式提供,但我遇到了以下抛出的错误,错误是从mongock而不是从我的变更集抛出的,它甚至不执行我的变更集。任何帮助都会很感激
我想在aws beanstalk中部署geodjango。 我已经尝试过这个解决方案。它以前工作过。 但现在它显示了这个错误。 以下是完整的错误日志
问题内容: 如何回滚失败的Rails迁移?我希望这会撤消失败的迁移,但是不,它会回滚以前的迁移(失败的迁移减去一个)。而且也不起作用。我已经遇到过几次了,这非常令人沮丧。这是我做的一个简单测试,可以重复该问题: 结果: 好的,让我们回滚一下: 嗯?那是我在SimpleTest之前的最后一次迁移,而不是失败的迁移。(哦,如果迁移输出中包含版本号,那就太好了。) 因此,让我们尝试为失败的迁移Simpl
我刚刚在配置和充分理解flyway的过程中遇到了这样的情况: 我已成功配置新项目以使用Flyway。 我已成功将测试数据库从版本0迁移到1.0.3。 无法执行到版本1.0.4的迁移。(我试图添加已经存在的列,到目前为止没有问题,是我的错。) 但是,一旦我对相应的脚本进行了必要的更改以使其工作,flyway就会不断显示这样的消息: 由于我不想恢复一个完整的转储并再次应用每一次迁移,只是为了使alte
我已成功地将spring boot配置为使用Flyway的新项目 随Postgres数据库从版本0001.0迁移到0008.0 我已在本地手动更改脚本,但flyway迁移失败。 错误消息示例: 注意:-我不想从表flyway_schema_history中删除脚本条目。