【发布时间】:2020-10-25 05:40:27
【问题描述】:
当使用 mongo 模板为文档数据库集群中的事务启动会话时。
public class DocDBService() {
@Autowired
MongoTemplate mongoTemplate;
@Autowired
MongoTransactionManager mongoTransactionManager;
public void writeAsTransaction() {
mongoTemplate.setSessionSynchronization(SessionSynchronization.ALWAYS);
TransactionTemplate transactionTemplate = new TransactionTemplate(mongoTransactionManager);
transactionTemplate.execute(
new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(final TransactionStatus status) {
mongoTemplate.save(new Document("abc", 1), "test");
mongoTemplate.remove(new Document("abc", 1), "test");
}
}
);
}
}
抛出错误
Sessions are not supported by the MongoDB cluster to which this client is connected
集群 URL 确实启用了复制
mongodb://user:password@cluster-url/default?ssl=true&replicaSet=rs0&readPreference=secondaryPreferred
复制配置:
rs0:PRIMARY> rs.conf()
{
"_id" : "rs0",
"configsvr" : false,
"protocolVersion" : 1,
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "cluster.****.us-west-*.docdb.amazonaws.com:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"slaveDelay" : 0
},
{
"_id" : 1,
"host" : "cluster-1.****.us-west-*.docdb.amazonaws.com:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"slaveDelay" : 0
},
{
"_id" : 2,
"host" : "cluster-2.****.us-west-*.docdb.amazonaws.com:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"slaveDelay" : 0
}
],
"settings" : {
"getLastErrorDefaults" : {
"w" : "majority",
"wtimeout" : 0
}
}
}
在具有单机复制的本地 Mongo DB 3.6 中也是如此。
任何有关如何克服这一点的信息都会有所帮助。提前致谢。
文档:
【问题讨论】:
标签: mongodb transactions replication distributed-transactions aws-documentdb