mongodb - 此客户端所连接的 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);
}
}
解决方案
在 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
推荐阅读
- sql - 试图从sql中的数据中获取最新记录
- sql - SQL CTE 返回 Not A Group By Expression 错误
- swift - iOS图表水平条形图不显示条形值
- java - 警报管理器、作业调度器和工作管理器,如果从一加 7 中的最近应用程序中删除应用程序,它们都不会工作
- woocommerce - Woocommerce中的自定义上一个/下一个产品
- c# - 使用 Azure Functions 进行 ILogger 依赖注入
- angular - Angular HTTP POST 响应在暂存中给出 404 Not Found Error 但在本地工作
- python - 为什么我无法读取我的新文本文件?
- android - Android R new Api isAutoRevokeWhitelisted() 总是给 false 即使手动权限重置打开/关闭
- ibm-cloud - IBM Cloud:通过 API 为存储桶创建与 S3 兼容的凭据