zoukankan      html  css  js  c++  java
  • 【spring-boot】spring-boot 事物管理——之注解@Transactional

    设置事务管理

    在Spring Boot中推荐使用@Transactional注解来申明事务。

    首先需要导入依赖:

    <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-jdbc</artifactId>

    </dependency>

    当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。

    在Service中添加@Transactional注解

    后补:

    事务的嵌套概念
     * 所谓事务的嵌套就是两个事务方法之间相互调用。spring事务开启 或是基于接口或是基于类的代理被创建
     * 注意一定是代理,不能手动new一个对象。并且此类有无接口都行,一定要被代理 spring中的bean只要纳入IOC管理被代理的
     * 所以同一个类中搞得一个方法调用另一个方法有事务的方法,事务是不会起作用的
     * spring 默认情况下不会对运行期列外runtimeExceptipon 既uncheck异常 进行事务回滚、
     * 如果遇到cheched异常就不会回滚。
     * 如果改变默认规则
     *   让checked例外也回回滚。在整个方法上加上@Trancational(rollbackFor=Exception.class)
     *   2.让unchecked例外不回滚,#Trancational(notRollbackFor=RunTimeExcepiton.class)

    spring事务传播属性
     *   在spring的TrancationDefination接口中一定定义了6中事务传播属性、
     *   Propagation_required 支持当前事务。如果当前没有事务。就创建一个新的事务。这是最常见的选择
     *   Propagation_Supports 支持当前事务  如果没有事务,就以非事务方式执行
     *   Propagation_Requres_new 新建事务。如果当前存在事务,把当前事务挂起。
     *   Propagation_Not_Supports 一以非事务方式执行操作。如果当前存在事务。就把当前事务挂起。
     *   Propagation_Never 以非事务方式执行。如果当前存在事务。则抛出异常
     *   Propagation_Nested 如果当前存在事务。则在嵌套事务内执行,如果当前没有事务。则进行与PRO Prgation_Requered类似

  • 相关阅读:
    three.js 显示中文字体 和 tween应用
    Caddy v1 版本增加插件
    Git 常用命令大全
    批量部署ssh免密登陆
    Python MySQLdb 模块使用方法
    python XlsxWriter创建Excel 表格
    DB2数据库的日志文件管理
    Linux 文本对比 diff 命令详解(整理)
    ssh 免交互登录 ,远程执行命令脚本。
    linux 出错 “INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案(转)
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860984.html
Copyright © 2011-2022 走看看