一、@Transactional 注解使用

  • @Transactional  注解只能用在public 方法上,如果用在protected或者private的方法上,不会报错,但是该注解不会生效。
  • @Transactional注解只能回滚非检查型异常,具体为RuntimeException及其子类。
  • 使用rollbackFor 属性来定义回滚的异常类型,使用 propagation 属性定义事务的传播行为。如:
 @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
//回滚Exception类的异常,事务的传播行为支持当前事务,如果没有事务,那么会创建一个事务。
  • @Transactional注解不能回滚被try{}catch() 捕获的异

二、 Spring事务的传播行为

    1)PROPAGATION_REQUIRED   :  支持当前事务,如果当前没有事务,则创建一个事务,这是最常见的选择。

2)PROPAGATION_SUPPORTS   :  支持当前事务,如果当前没有事务,就以非事务来执行。

3)PROPAGATION_MANDATORY  :  支持当前事务,如果没有当前事务,就抛出异常。

4)PROPAGATION_REQUIRES_NEW :   新建事务,如果当前存在事务,就把当前事务挂起。

5)PROPAGATION_NOT_SUPPORTED :  以非事务执行操作,如果当前存在事务,则当前事务挂起。

6)PROPAGATION_NEVER :  以非事务方式执行,如果当前存在事务,则抛出异常。

7)PROPAGATION_NESTED :  如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED 类似的操作。

三、开发案例

workflow服务, 设置的事务传播行为为 :REQUIED

payment服务添加注解: 回滚所有的异常。

Fegin:

package com.hand.hcf.app.workflow.client.extraApi;

import com.hand.hcf.app.workflow.approval.dto.CashTransactionDataCreateCO;
import com.hand.hcf.app.workflow.brms.dto.ApprovalDocumentWithValuesCODTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import java.util.List; /**
* PaymentInterface
*
* @Auther: zhengbing.zhang
* @Date:2019/8/19
* @remark
*/
@FeignClient(
name = "${hcf.application.payment.name:fec-payment}",
url = "${hcf.application.payment.url:}",
contextId = "PaymentInterface"
)
public interface PaymentInterface { @PostMapping({"/api/implement/payment/cash/transactionData/batch/v2"})
void saveTransactionDatasBatch(@RequestBody List<ApprovalDocumentWithValuesCODTO> cashTransactionDatas); @GetMapping("/api/acp/requisition/header/update/status/by/documentNumber")
void updateDocumentStatusByDocumentNumber(
@RequestParam("documentNumber") String documentNumber
,@RequestParam("status") Integer status); }

测试:

workflow 调用payment服务的saveTransactionDatasBatch方法, 然Payment服务报错,workflow服务收到错误后回滚:

@Transactional注解详细使用的更多相关文章

  1. spring的@Transactional注解详细用法

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...

  2. (后端)spring的@Transactional注解详细用法(转)

    转自一人浅醉-博客园: 事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度.TransactionDefinition 接口中定义了五个表示隔离级别的常量: TransactionDefinit ...

  3. spring的@Transactional注解详细用法(转载)

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...

  4. spring的@Transactional注解详细用法(转)

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...

  5. @Transactional注解详细用法

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...

  6. spring mvc的@Transactional注解

    转自:https://www.cnblogs.com/yepei/p/4716112.html spring的@Transactional注解详细用法   概述 事务管理对于企业应用来说是至关重要的, ...

  7. JPA中自定义的插入、更新、删除方法为什么要添加@Modifying注解和@Transactional注解?

    前几天,有个同事在使用JPA的自定义SQL方法时,程序一直报异常,捣鼓了半天也没能解决,咨询我的时候,我看了一眼他的程序,差不多是这个样子的: @Repository public interface ...

  8. 事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framewor ...

  9. Spring @Transactional注解不起作用解决办法及原理分析

    Transactional失效场景介绍 第一种 Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用.例如以下代码. 定义一个错误的@Trans ...

随机推荐

  1. JavaScript复习 1

    概括及使用方法: JavaScript编写规范 一般放在<head>-</head>中间 逐行被执行,越短越好 大小写敏感 语句是基本单位 通常以分号表示语句结束 多行语句可以 ...

  2. 西邮Linux兴趣小组第一次技术分享会

    2016年10月30日晚,西邮Linux兴趣小组技术分享会在西安邮电大学长安校区东区逸夫教学楼FF305室成功举办.200多名来自全校不同专业的15,16级同学参加了此次分享会. 分享会于20:00正 ...

  3. Redis Stream类型的使用

    一.背景 最近在看redis这方面的知识,发现在redis5中产生了一种新的数据类型Stream,它和kafka的设计有些类似,可以当作一个简单的消息队列来使用. 二.redis中Stream类型的特 ...

  4. PTA 银行排队问题之单队列多窗口服务 (25分)

    PTA 银行排队问题之单队列多窗口服务 (25分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选 ...

  5. 我罗斯方块第二次作业(Block类)

    负责任务 完善Block类的相关函数及变量: 对Block类的函数功能进行调试: github项目地址. 开发日记 2020.5.11 今天和朋友们讨论了如何分工的工作,我负责的部分是Block类的完 ...

  6. Django 小实例S1 简易学生选课管理系统 4 实现登录页面

    Django 小实例S1 简易学生选课管理系统 第4节--实现登录页面 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新的额外知识点: ...

  7. Java包装类,以及Integer与int之间的比较

    一.Java的基本类型 Java语言中提供了八种基本类型,包括六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. 整数型,包括byte.short.int.long,默认初始值是0 ...

  8. Java数组声明

    初始赋值值:例:一个二维数组,有二个1维数组组成,每一个一维数组有3个元素int[][] a = { {1,2,3}, {4,5,6} } ;动态二维数组声明:例:一个二维数组,有二个1维数组组成,每 ...

  9. [loj2469]最小方差生成树

    2018年论文题 约定:令点集$V=[1,n]$.边集$E=[1,m]$,记$m$条边依次为$e_{i}=(x_{i},y_{i},c_{i})$(其中$1\le i\le m$),将其按照$c_{i ...

  10. 四、Zookeeper3.7安装

    前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS 三.MapReduce编程实例 Zookeeper安装 @ 目录 前文 Zooke ...