首页 > 解决方案 > 此客户端所连接的 MongoDB 集群不支持会话-springboot-mongodb-transactions

问题描述

我需要使用 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);
    }
}

标签: mongodbspring-boottransactionsmongotemplate

解决方案


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

  • 在 Windows 上,安装期间包含默认的 <安装目录>/bin/mongod.cfg 配置文件

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

添加以下配置

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

sudo service mongod 重启;

蒙哥;

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

检查要启用的配置

rs.conf()

我们可以将连接 URL用作

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

文档:配置选项 单实例复制


推荐阅读