首页 > 其他分享 >多文档事务

多文档事务

时间:2023-05-06 14:24:25浏览次数:41  
标签:事务 -- mongodb 27017 实例 文档 docker

多文档事务

mongodb单机只能支持单文档事务,只能保证单文档的原子性,如果想要保证多文档的原子性,那么就需要分布式复制集了,由于我使用的是docker容器创建的mongodb实例,演示的时候也使用docker容器即可。

  1. 创建三个mongodb实例。
    --replSet 设置集群名称
 docker run --name mongo1 -p 27017:27017 -d mongo --replSet "RS"
 docker run --name mongo2 -p 27018:27017 -d mongo --replSet "RS"
 docker run --name mongo3 -p 27019:27017 -d mongo --replSet "RS"
  1. 在主实例中添加用户并设置权限、用户名和密码。
docker exec -it mongo1 bash;
use admin;
db.createUser(
{
     user: "lyra",
     pwd: "365373011",
     roles: [ { role: "root", db: "admin" } ]
   }
 )
  1. 添加spring data mongo的集群配置文件
    mongdbUrl格式:mongodb://用户名:密码@实例1ip:实例1端口,实例2ip:实例2端口/数据库?replicaSet=集群名称&replicaSet=认证数据库名称
spring:
  # mongodb 连接
  data:
    mongodb:
      uri: mongodb://lyra:[email protected]:27017,192.168.158.222:27018,192.168.158.222:27019/study?replicaSet=RS&authSource=admin
  1. 在spring data mongo中配置事务管理器。
@Configuration
public class MongoConfig {
    @Bean
    MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
    }
}
  1. 在service中添加Transactional注解。
@RestController
public class MongoController {
    @Autowired
    private MongoTemplate mongoTemplate;

    @GetMapping("/test")
    @Transactional
    public Object test() {
        for (int i = 0; i < 10; i++) {
            Abc abc = new Abc();
            abc.setAge(12);
            abc.setName("lyra");

            if (i == 5) {
                throw new RuntimeException("事务测试");
            }

            mongoTemplate.insert(abc);
        }
        return "成功";
    }
}

调用接口之后可以看到数据库中的数据并没有进行提交,这表示多文档事务以及配置成功。
image
image

标签:事务,--,mongodb,27017,实例,文档,docker
From: https://www.cnblogs.com/lyraHeartstrings/p/17377097.html

相关文章

  • 【Apache POI】Word文档转换HTML,多级列表自定义处理
    本文使用poi和xdocreport组件,在其基础自定义实现某些功能最近有个需求,文档的转换,需要把Word文档转换为编辑器可识别支持的HTML格式类型,Apache的开源组件poi可以解析docx和doc类型的文档,于是使用该组件实现需求关于Word文档的俩种格式,docx格式是一种压缩文件,由xml格......
  • 函数文档
    在函数的定义中,常利用多行注释给函数写文档,称为函数文档。函数文档是一种特殊的注释,以  """  开头和结束函数作为一个对象,有一个特殊的属性__doc__(注意:doc左右两侧均为两个下画线),通过这个属性同样可以获得函数的描述文档。 定义函数有默认值,放在参数的后面......
  • java基于springboot+vue的校园新闻网站、校园新闻管理系统,附源码+数据库+文档+PPT,适合
    1、项目介绍校园新闻网站的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、新闻类型管理、校园新闻管理、留言板管理、论坛交流、系统管理,用户前台:首页、校园新闻、论坛交流、留言反馈、个人中心、后台管理等功能。由于本网站的功能模块设计比较全面,所......
  • 全局事务与本地事务的区别应用
    全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA二阶段提交协议与“企业信息系统”(EIS)或数据库进行交互。 本地事务:在单个EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。 在Hibernate配置文件中有这么两......
  • 数据库事务
    数据库事务(一)概述数据库事务(DatabaseTransaction),是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应......
  • java基于springboot+vue的垃圾分类管理系统,附源码+文档+PPT+数据库
    1、项目介绍垃圾分类网站的主要使用者分为管理员和用户、垃圾分类管理员,实现功能包括管理员:首页、个人中心、用户管理、垃圾分类管理员管理、垃圾分类管理、垃圾类型管理、垃圾图谱管理、系统管理,垃圾分类管理员;首页、个人中心、用户管理、垃圾分类管理员管理、垃圾分类管理、垃......
  • SQL Server事务执行过程中中释放锁导致的死锁问题 - 排查与分析
    0.前情提要系统的某个用来上报数据的接口存在死锁的问题。这个接口内部对多张表进行了Update操作,执行顺序为A表、B表、C表、D表、A表。死锁发生的SQL,一条是第一次更新A表的SQL,另一条是第二次更新A表的SQL。整个更新都处在一个事务内,理论上讲,只要第一个Session开始执行事务,第二个......
  • 高级Java程序员必问,Redis事务终极篇
    1.简介1.1什么是Redis事务Redis事务(Transaction)通过将多个Redis操作封装为一个原子性的操作序列,确保在事务执行过程中,不会受到其他客户端的干扰。从而在保证数据一致性的同时,协调并发,提高数据操作的效率和性能。1.2Redis事务的应用场景在分布式系统和高并发场景下,事务处理......
  • PyTorch 1.0 中文文档:torch.utils.data
    译者:BXuan694classtorch.utils.data.Dataset表示数据集的抽象类。所有用到的数据集都必须是其子类。这些子类都必须重写以下方法:__len__:定义了数据集的规模;__getitem__:支持0到len(self)范围内的整数索引。classtorch.utils.data.TensorDataset(*tensors)用于张量封装的Dataset类......
  • PyTorch 1.0 中文文档:torch.utils.cpp_extension
    译者:belonHantorch.utils.cpp_extension.CppExtension(name,sources,*args,**kwargs)创建一个C++的setuptools.Extension。便捷地创建一个setuptools.Extension具有最小(但通常是足够)的参数来构建C++扩展的方法。所有参数都被转发给setuptools.Extension构造函数。例子>>>from......