spring boot 添加事物使用 @Transactional注解

简单使用 在启动类上方添加 @EnableTransactionManagement注解

使用时直接在类或者方法上使用 @Transactional注解

如:

  1. package com.zyc;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.context.annotation.ComponentScan;
  6. import org.springframework.transaction.annotation.EnableTransactionManagement;
  7. @ComponentScan(value = { "com.zyc" })
  8. @MapperScan("com.zyc.mapper")
  9. @EnableTransactionManagement
  10. @SpringBootApplication
  11. public class App {
  12. public static void main(String[] args) {
  13. SpringApplication.run(App.class, args);
  14. }
  15. }
package com.zyc;

import org.mybatis.spring.annotation.MapperScan;


import org.springframework.boot.SpringApplication;


import org.springframework.boot.autoconfigure.SpringBootApplication;


import org.springframework.context.annotation.ComponentScan;


import org.springframework.transaction.annotation.EnableTransactionManagement;

@ComponentScan(value = { "com.zyc" })


@MapperScan("com.zyc.mapper")



@EnableTransactionManagement

@SpringBootApplication


public class App {

public static void main(String[] args) {</br>
SpringApplication.run(App.class, args);</br>
}</br>

}

使用:直接作用在方法上

  1. @Transactional(rollbackFor=Exception.class)
  2. public void addData2(User user){
  3. userDao.insert(taskInfoTb);
  4. int i=9/0;
  5. }
@Transactional(rollbackFor=Exception.class)

public void addData2(User user){

userDao.insert(taskInfoTb);

int i=9/0;

}

使用时需要注意一下几点

  1. 1.不要在接口上声明 @Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注解可能无效。
  2. 2.将 @Transactional  放置在类级的声明中 放在类声明 会使得所有方法都有事务 故 @Transactional应该放在方法级别 不需要使用事务的方法,就不要放置事务,比如查询方法。否则对性能是有影响的。
  3. 3. 使用了 @Transactional的方法,对同一个类里面的方法调用, @Transactional无效。比如有一个类Test,它的一个方法A,A再调用Test本类的方法B(不管B是否public还是private),但A没有声明注解事务,而B有。则外部调用A之后,B的事务是不会起作用的。(经常在这里出错)
  4. 4.使用了 @Transactional 的方法, 只能是public, @Transactional注解的方法都是被外部其他类调用才有效,故只能是public。道理和上面的有关联。故在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错,但事务无效。
  5. 5.经过在ICORE-CLAIM中测试,效果如下:
  6. A.抛出受查异常XXXException,事务会回滚。
  7. B.抛出运行时异常NullPointerException,事务会回滚。
  8. C. Quartz中,execute直接调用加了 @Transactional方法,可以回滚;间接调用,不会回滚。(即上文3点提到的)
  9. D.异步任务中,execute直接调用加了 @Transactional方法,可以回滚;间接调用,不会回滚。(即上文3点提到的)
  10. E.在action中加上 @Transactional,不会回滚。切记不要在action中加上事务。
  11. F.在service中加上 @Transactional,如果是action直接调该方法,会回滚,如果是间接调,不会回滚。(即上文3提到的)
  12. G.在service中的private加上 @Transactional,事务不会回滚。
1.不要在接口上声明 @Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注解可能无效。
2.将 @Transactional 放置在类级的声明中 放在类声明 会使得所有方法都有事务 故 @Transactional应该放在方法级别 不需要使用事务的方法,就不要放置事务,比如查询方法。否则对性能是有影响的。
3. 使用了 @Transactional的方法,对同一个类里面的方法调用, @Transactional无效。比如有一个类Test,它的一个方法A,A再调用Test本类的方法B(不管B是否public还是private),但A没有声明注解事务,而B有。则外部调用A之后,B的事务是不会起作用的。(经常在这里出错)
4.使用了 @Transactional 的方法, 只能是public, @Transactional注解的方法都是被外部其他类调用才有效,故只能是public。道理和上面的有关联。故在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错,但事务无效。
5.经过在ICORE-CLAIM中测试,效果如下:
A.抛出受查异常XXXException,事务会回滚。
B.抛出运行时异常NullPointerException,事务会回滚。
C. Quartz中,execute直接调用加了 @Transactional方法,可以回滚;间接调用,不会回滚。(即上文3点提到的)
D.异步任务中,execute直接调用加了 @Transactional方法,可以回滚;间接调用,不会回滚。(即上文3点提到的)
E.在action中加上 @Transactional,不会回滚。切记不要在action中加上事务。
F.在service中加上 @Transactional,如果是action直接调该方法,会回滚,如果是间接调,不会回滚。(即上文3提到的)
G.在service中的private加上 @Transactional,事务不会回滚。

如果需要自己定制的事物可以实现TransactionManagementConfigurer接口

spring boot @Transactional事物处理的更多相关文章

  1. 事物Spring boot @Transactional

    事物:dr @Override @UDS(value="fq") @Transactional public BaseResultMessage testTransactional ...

  2. spring boot @Transactional的一个小坑

    同一个类Service下,有两个函数 method_1和 method_2,且method_1内部调用了method_2,那么希望method_2内部意外时,数据库回滚,那么一定要在method_1上 ...

  3. Spring boot @Transactional

    1.注解@Transactional 2.异常回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); @Ov ...

  4. spring boot 中事物的使用

    一.什么是事务? 事务,通俗的说就是,同时做多个事,要么全做,要么不做,也是其特性.举个例子来说,好比你在某宝.某东.某多上购物,在你提交订单的时候,库存也会相应减少,不可能是钱付了,库存不减少,或者 ...

  5. Spring Boot入门系列(十三)如何实现事务

    前面介绍了Spring Boot 中的整合Mybatis并实现增删改查.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1 ...

  6. Spring Boot 数据访问集成 MyBatis 与事物配置

    对于软件系统而言,持久化数据到数据库是至关重要的一部分.在 Java 领域,有很多的实现了数据持久化层的工具和框架(ORM).ORM 框架的本质是简化编程中操作数据库的繁琐性,比如可以根据对象生成 S ...

  7. Spring Boot 中使用 @Transactional 注解配置事务管理

    事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP ...

  8. Spring Boot中使用@Transactional注解配置事务管理

    事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP ...

  9. 67. @Transactional的类注入失败【从零开始学Spring Boot】

    [从零开始学习Spirng Boot-常见异常汇总] Spring的代理模式有两种:java自带的动态代理模式和cglib代理模式,cglib代码模式适用于没有接口的类,而java自带适用于接口类,默 ...

随机推荐

  1. jQuery - 制作点击显示二级菜单效果

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. 应用程序 /dev/rtc 编程 获取时间 2011-12-13 01:01:06【转】

    本文转载自:http://blog.chinaunix.net/uid-16785183-id-3040310.html 分类: 原文地址:应用程序 /dev/rtc 编程 获取时间 作者:yuwei ...

  3. HDU 5692 Snacks(DFS序+线段树)

    Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  4. spring 监听器 IntrospectorCleanupListener简介

    转自:https://blog.csdn.net/ywb201314/article/details/51144256 其中JavaBeans Introspector是一个类,位置在Java.bea ...

  5. 纯CSS 实现关闭图标 icon

    本文介绍关闭 icon 的实现.具体如下 1.html部分 <span id="close"></span> 2.css部分 #close { displa ...

  6. (Go)10.流程控制示例

    package main import ( "math/rand" "fmt" ) func main() { //var n int n := rand.In ...

  7. AMD 与 CMD 区别

    作者:玉伯链接:https://www.zhihu.com/question/20351507/answer/14859415来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  8. input点击修改样式

    <input id="geren" type="button" value="个人奖励" style="BORDER-TOP ...

  9. Unity中内嵌网页插件UniWebView

    一.常见Unity中内嵌网页实现方式: 1.UnityWebCore只支持windows 2.Unity-Webview支持Android,IOS 3.UniWebView支持mac os,Andro ...

  10. 上传预览图片的插件jquery-fileupload

    上传预览图片的插件jquery-fileupload github地址:https://github.com/blueimp/jQuery-File-Upload 中文文档:http://www.jq ...