首页 > 数据库 >springboot与mongodb之事务管理(二)

springboot与mongodb之事务管理(二)

时间:2023-05-04 16:12:42浏览次数:53  
标签:事务管理 事务 springboot mongodb springframework org import public

一、事务说明

1、在4.0版本中,MongoDB支持副本集上的多文档事务,分片集群是不支持事务的,会报以下异常

Transactions are not supported by the MongoDB cluster to which this client is connected

2、在版本4.2中,MongoDB引入了分布式事务,在副本集或分片集群上都是支持事务的。

3、事务是建立在已存在集合上的,所以不支持事务内创建集合。

二、事务配置

1、新建配置类

import lombok.extern.slf4j.Slf4j;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.MongoTransactionManager;

/**
 * mongodb配置类
 *
 */
@Configuration
@Slf4j
public class MongodbConfig {
    /**
     * mongodb事务配置
     *
     * @param factory 工厂
     * @return 事务管理器
     */
    @Bean
    public MongoTransactionManager transactionManager(MongoDatabaseFactory factory) {
        return new MongoTransactionManager(factory);
    }
}

2、在需要开启事务的方法上使用@Transactional注解就可以了。

3、若同时使用mysql,mysql事务会失效

三、与mysql事务同时使用

1、新建配置类,同时创建两个事务管理器

import lombok.extern.slf4j.Slf4j;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.MongoTransactionManager;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * 事务配置类*/
@Configuration
@Slf4j
public class TransactionConfig {
    /**
     * mongodb事务配置
     *
     * @param factory 工厂
     * @return 事务管理器
     */
    @Bean("mongoTransactionManager")
    public MongoTransactionManager transactionManager(MongoDatabaseFactory factory) {
        return new MongoTransactionManager(factory);
    }
    /**
     * mysql事务管理器
     *
     * @param dataSource 数据源
     * @return 事务管理器
     */
    @Bean
    @Primary
    public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

2、需要用到mysql事务则在方法上添加注解@Transactional

    @Transactional(rollbackFor = Exception.class)
    public void save(Vo vo) {
    }

3、需要用到mongodb事务则在方法上添加注解@Transactional(transactionManager = "mongoTransactionManager")

    @Transactional(transactionManager = "mongoTransactionManager")
    public void save(Vo vo) {
    }

标签:事务管理,事务,springboot,mongodb,springframework,org,import,public
From: https://www.cnblogs.com/xyinjie/p/17371541.html

相关文章

  • springboot单元测试中添加了@Autowired任然报错nullpoint(已解决)
     使用了autowired还是报错空指针异常说明就是包没有导入,springboot导包的操作在于启动application类,所以问题就在于没有单元测试时没有启动主类,解决方法:@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes=SaTokenDemoApplication.class)加上如上的注解,@runwi......
  • 【SpringBoot】【一】 加载初始化器、监听器详解
    1 前言本节主要讲下SpringBoot启动的时候,加载初始化器、监听器的过程哈。2 加载时机我们先来看下加载的时机,也就是什么时候加载的呢,就是我们SpringBoot启动的时候,创建SpringApplication的时候就会去加载的,我们看下:@SpringBootApplicationpublicclassDemoApplicati......
  • springboot与mongodb之整合(一)
    一、添加maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.6.7</version></dependency>二、配置properties文件1、mongodb无......
  • springboot 切面注解方式 记录日志
    1.定义GateOpLogimportjava.lang.annotation.*;/***操作日志记录*@authorcodefulture*/@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceGateOpLog{/***说明*/Strin......
  • springboot异常处理的通用方式2
    2、定义一个异常的枚举数组•ServerErrCodeDefine类//```java@AllArgsConstructor@GetterpublicenumServerErrCodeDefine{privateinterrCode;privateStringcode;privateHttpStatushttpStatus;privateStringmessageSourceKey;/***************************......
  • SpringBoot 集成 Shiro 简单教程
    1.前言 ApacheShiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理。Shiro有三大核心组件:Subject: 即当前用户,在权限管理的应用程序里往往需要知道谁能够操作什么,谁拥有操作该程序的权利,shiro中则需要通过Subject来提供基础的当前用户信息,Sub......
  • SpringBoot项目部署在外置Tomcat正常启动,但项目没有被加载的问题
    最近打算部署个SpringBoot项目到外置Tomcat运行,但是发现tomcat启动成功,访问却一直404,刚开始以为是Tomcat的问题,就一直在改Tomcat配置。最后发现tomcat启动时根本就没加载到项目,因为控制台没有打印"SpringBoot"的项目标志经过一番百度查找,最后发现是因为项目启动类没有继承Spring......
  • 记录一件很神奇的类型转换问题(springboot项目+echarts)
    今天博主在应付学校的实验,想要使用echarts绘制一张很简单的条形图(博主是初学者),如下(时间还未作排序) 对于横轴,我封装了一个dateList,这个datelist是用java,将数据库中date类型的数据,提取其年月拼装而成的,代码如下:Stringdate=String.valueOf(art.getArticleCreateTime().getYea......
  • java基于springboot+vue非前后端分离的网上商城购物系统、在线商城管理系统,附源码+数
    1、项目介绍java基于springboot+vue非前后端分离的网上商城购物系统、在线商城管理系统,实现管理员:首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理,用户;首页、个人中心、订单评价管理、我的收藏管理、订单管理,前台首页;首页、商品信息、......
  • SpringBoot定义优雅全局统一Restful API 响应框架二
    这里解决之前留下来的问题,当程序没有正常返回时候就是程序由于运行时异常导致的结果,有些异常我们可,能无法提前预知,不能正常走到我们return的R对象返回。这个时候该如何处理在SpringBoot中,可以使用@ControllerAdvice注解来启用全局异常处理。通过使用@ControllerAdvice注解,可以捕......