gpt4 book ai didi

Java Spring : Compatibility for both transactional and non-transactional versions of mongodb

转载 作者:行者123 更新时间:2023-11-29 08:23:06 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 2.1.2 版本(mongodb 驱动程序 v 3.8.2)并开发使用 mongodb 运行的 Web 应用程序。我的应用兼容mongodb 3.4版本(这个版本不支持事务),现在引入事务机制。我用事务注解来注解我的服务方法

@Transactional
public void process(Object argument) {
...
...
...
}

它在 mongodb v 4 上运行良好,一切正常 - 失败的事务被回滚。

但是当我使用 mongodb v 3.4 启动我的应用程序时,我的应用程序崩溃了

Sessions are not supported by the MongoDB cluster to which this client is connected

异常。

问题是我希望我的应用程序支持两种情况:使用相同代码的事务性和非事务性(对于两个 mongodb 版本)。所以我想知道我该怎么做?似乎我的应用程序应该只为特定版本的 mongo 创建 session ,即应该只针对这种情况处理此注释。

我该怎么做?

最佳答案

我找到了解决办法。 Spring 在创建事务之前检查当前上下文中是否存在 PlatformTransactionManager。因此,如果未定义此 bean,则不会为事务打开 session 。因此,我在我的配置类中为此目的使用了条件 bean:

    @Bean
@Autowired
@ConditionalOnExpression("'${mongo.transactions}'=='enabled'")
MongoTransactionManager mongoTransactionManager(MongoDbFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}

所以 MongoTransactionManager bean 只有在 mongo.transactions 参数设置为启用时才会被创建。

关于Java Spring : Compatibility for both transactional and non-transactional versions of mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55797342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com