此客户端所连接的 MongoDB 集群不支持会话-springboot-mongodb-transactions

Posted

技术标签:

【中文标题】此客户端所连接的 MongoDB 集群不支持会话-springboot-mongodb-transactions【英文标题】:Sessions are not supported by the MongoDB cluster to which this client is connected-springboot-mongodb-transactions 【发布时间】:2019-11-06 02:47:51 【问题描述】:

我需要使用 spring mongotemplate 事务。 除非满足条件,否则将不得不手动回滚事务。 我得到了例外 com.mongodb.MongoClientException:此客户端连接到的 MongoDB 集群不支持会话。 如何使用 Spring mongodb 事务。 请帮帮我。

@Autowired
MongoTransactionManager mongoTransactionManager;

@Autowired
TestDao testDao;

@Transactional
public void testMethod() 
    int temp = 0;
    try 
        testDao.saveDatainTempTable();
        testDao.saveMongoData();
        if (temp == 0) 
            System.out.println("=========================");
            TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
            mongoTransactionManager.rollback(TransactionInterceptor.currentTransactionStatus());
        
     catch (Exception e) 

    



@Configuration
public class MongoTransactionConfig extends AbstractMongoConfiguration 

    @Bean
    MongoTransactionManager transactionManager(MongoDbFactory dbFactory) 
        return new MongoTransactionManager(dbFactory);
    

    @Override
    protected String getDatabaseName() 
        return "test";
    

    @Override
    public MongoClient mongoClient() 
        return new MongoClient("127.0.0.1", 27017);
    

【问题讨论】:

考虑将服务器端 Mongo 客户端更新为支持会话的版本。 我正在使用仅支持会话的更新版本 mongo v4.0.9。但我仍然遇到异常。我不明白我哪里出错了 我在使用 monogdb server 4.0.9 时遇到了类似的问题 @naaz 如果您找到任何解决方案,请告诉我 有人告诉我,在我的情况下它不适用于单个实例 【参考方案1】:

在 Linux 上,包含默认的 /etc/mongod.conf 配置文件 使用包管理器安装 MongoDB 时。

在 Windows 上,一个 默认的/bin/mongod.cfg 配置文件是 在安装过程中包含

在 macOS 上,包含默认的 /usr/local/etc/mongod.conf 配置文件 从 MongoDB 的官方 Homebrew tap 安装时。

添加以下配置

replication:
   oplogSizeMB: 128
   replSetName: "rs0"
   enableMajorityReadConcern: true

sudo service mongod restart;

蒙哥;

rs.initiate(
      _id: "rs0",
      version: 1,
      members: [
          _id: 0, host : "localhost:27017" 
      ]
   
)

检查要启用的配置

rs.conf()

我们可以使用连接URL作为

mongodb://localhost/default?ssl=false&replicaSet=rs0&readPreference=primary

文档:config-optionssingle-instance-replication

【讨论】:

以上是关于此客户端所连接的 MongoDB 集群不支持会话-springboot-mongodb-transactions的主要内容,如果未能解决你的问题,请参考以下文章

c#mongodb.driver 连接模式都有哪些

mongodb--选举失败

支持索引视图的会话设置

MongoError:此 MongoDB 部署不支持可重试写入。请将 retryWrites=false 添加到您的连接字符串

MongoError:此 MongoDB 部署不支持可重试写入。请将 retryWrites=false 添加到您的连接字符串

Win7 远程桌面 错误代码:5 异常处理(您的远程桌面会话即将结束 此计算机的虚拟内存可能不足。请关闭其他程序,然后重试连接远程计算机。如果问题仍然存在,请联系网络管理员或技术支持。)