spring入门到放弃——spring事务管理
Spring事务提供了两种管理的的方式:编程式事务和声明式事务
简单回顾下事务:
事务:逻辑上的一组操作,组成操作的各个单元,要么全部成功,要么全部失败。
事务特性:
原子性:一个事务包含的各个操作单元不可分割
一致性:事务执行前后数据应当保持一致
隔离性:一个事务的执行不应当受到其他事务的干扰
持久性:事务执行完之后,数据就被持久化到磁盘上
Spring事务管理常用的API:
PlatformTransactionmanager:平台事务管理器
平台事务管理器:是一个接口,是spring用于管理事务的真正的对象
DataSourceTransactionManager:底层使用JDBC管理事务的时候的具体实现类
HibernateTransactionManager:底层使用Hibernate管理事务时候的具体实现类
TransactionDefinition:事务定义信息
事务定义:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读
TransactionStatus:事物的状态
事务状态:用于记录事务管理过程中,事务的状态的对象。
事务管理API的关系:
spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,在事务管理过程中,就会产生各种状态,将这些状态及信息记录到事务状态的对象中。
Spring事务的传播行为
spring事务传播行为主要负责业务层之间互相调用的复杂问题。spring会提供7种事务的传播行为,大概可以分为三类:
假设有A/B两个方法,各自包含不同的事务操作。
保证多个操作在同一个事务中
PROPAGATION_REQUIRED (常用):默认值,B事务所在的方法调用A事务所在的方法,如果A中有事务,则使用A中的事务(包含B事务),如果A没有,创建一个新的事务,将操作包含进来
PROPAGATION_MANDATORY :如果A中有事务,使用A中的事务。如果A没有事务,抛出异常。
PROPAGATION_SUPPORTS :支持事务,如果A中有事务,使用A中的事务。如果A没有事务,不使用事务。
保证多个操作不在同一个事务中
PROPAGATION_REQUIRES_NEW (常用):B事务所在的方法调用A事务所在的方法,如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含B自身操作。如果A中没有事务,创建一个新事务,包含B自身操作。
PROPAGATION_NEVER :如果A中有事务,报异常。
PROPAGATION_NOT_SUPPORTED :如果A中有事务,将A的事务挂起。不使用事务管理
嵌套式事务
PROPAGATION_NESTED (常用):嵌套事务,B事务所在的方法调用A事务所在的方法,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点,执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置(A执行前),也可以回滚到保存点。
Spring的事务管理
声明式事务管理:
xml方式声明事务管理:
<!--配置service-->
<bean id="accountservice" class="com.demo1.tx.AccountServiceImp">
<property name="accountDao" ref="accountdao"/>
</bean>
<!--配置dao-->
<bean id="accountdao" class="com.demo1.dao.AccountDaoImp">
<property name="dataSource" ref="datasource"/>
</bean>
<!--1、配置数据库连接池,引入数据库配置文件-->
<context:property-placeholder location="classpath:com/demo1/jdbc.properties"/>
<bean id="datasource" class="www".120xh.cn"com.mchange.www.dfgj157.com v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"www.fengshen157.com//>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--2、配置事务管理器-->
<bean id="transactionManager" class= "org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"/>
</bean>
<!--3、配置事务的增强:需要注入一个事务管理器属性-->
<tx:advice transaction-manager="transactionManager" id="txadvice">
<tx:attributes>
<!--事务管理的规则-->
<tx:method name="*" propagation="REQUIRED"/> <!--表示设置所有方法的传播行为为required-->
</tx:attributes>
</tx:advice>
<!--4、aop的配置-->
<aop:config>
<aop:pointcut id="pointcut1" expression="execution(* com.demo1.tx.AccountServiceImp.*(..))"/>
<!--配置切入点为AccountServiceImp类下面的所有方法-->
<!-- <aop:aspect/> 多个切入点和多个通知的组合-->
<!--一个切入点和一个通知的组合-->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
注解方式声明事务管理:
配置事务管理器
<bean id="transactionManager" class= "org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="datasource"/> </bean>
开启事务注解
<tx:annotation-driven transaction-manager="transactionManager"/>
业务层方式上添加注解
spring入门到放弃——spring事务管理的更多相关文章
- Spring+JTA+Atomikos+mybatis分布式事务管理
我们平时的工作中用到的Spring事务管理是管理一个数据源的.但是如果对多个数据源进行事务管理该怎么办呢?我们可以用JTA和Atomikos结合Spring来实现一个分布式事务管理的功能.了解JTA可 ...
- spring boot配置mybatis和事务管理
spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...
- Spring 简单而强大的事务管理功能
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- java框架之Spring(3)-JDBC模板使用&事务管理
下面内容使用到的 jar 包下载 JDBC模板使用 入门 1.导包,如要导入 Spring 的基本开发包.数据库驱动包.Spring 提供的 JDBC 模板包,如下: 2.测试: @Test publ ...
- Spring 使用注解方式进行事务管理
转载:http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html 使用步骤: 步骤一.在spring配置文件中引入<tx:&g ...
- spring和mybatis整合进行事务管理
1.声明式实现事务管理 XML命名空间定义,定义用于事务支持的tx命名空间和AOP支持的aop命名空间: <beans xmlns="http://www.springframewor ...
- spring+mybatis之声明式事务管理初识(小实例)
前几篇的文章都只是初步学习spring和mybatis框架,所写的实例也都非常简单,所进行的数据访问控制也都很简单,没有加入事务管理.这篇文章将初步接触事务管理. 1.事务管理 理解事务管理之前,先通 ...
- 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...
- Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理
原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...
随机推荐
- Codeforces Round #321 (Div. 2) C Kefa and Park(深搜)
dfs一遍,维护当前连续遇到的喵的数量,然后剪枝,每个统计孩子数量判断是不是叶子结点. #include<bits/stdc++.h> using namespace std; ; int ...
- mysql数据库操作手册
1 存储过程的写法 以下是一个带有入参的存储过程模板, #删除方案-存储过程 CREATE PROCEDURE procPersonAppointRecallPlanByPlanUuidDelet ...
- 解决TS报错Property 'style' does not exist on type 'Element'
在使用queryselector获取一个dom元素,编译时却报错说property 'style' does not exist on type 'element'. 原因:这是typescript的 ...
- fei33423 工作 职场 格言
对老板: 1. 老板不知道你做的事情(目标设定) 2. 老板要的是规划(对上报告), 自己给自己设定 金字塔四位下的目标,各种维度.如何细化. 2.1 明确老板期望 2.2 与老板达成共识 2.3 ...
- 新环境安装 python3
参考 安装 python3 时,不要覆盖原环境的 python2.因为环境中有些程序是依赖 2 的,比如 yum.直接覆盖是会影响环境的. 最好的是编译安装 python3,执行指令是用 python ...
- MySQL的GTID复制与传统复制的相互切换
MySQL的GTID复制与传统复制的相互转换 1. GTID复制转换成传统复制 1.1 环境准备 1.2 停止slave 1.3 查看当前主从状态 1.4 change master 1.5 启动主从 ...
- spring bean的介绍以及xml和注解的配置方法
5.Bean 下边我们来了解一下Bean的: Bean的作用域Bean的生命周期Bean的自动装配Resources和ResourceLoader 5.1Bean容器的初始化 Bean容器的初始化 两 ...
- Linux基础学习-使用vsftpd服务传输文件
使用vsftpd服务传输文件 1 安装vsftpd [root@qdlinux ~]# yum install vsftpd Loaded plugins: product-id, search-di ...
- Python中的可迭代对象,迭代器与生成器
先来看一张概览图,关于容器(container).可迭代对象(Iterable).迭代器(iterator).生成器(generator). 一.容器(container) 容器就是一个用来存储多个元 ...
- Python爬虫二
常见的反爬手段和解决思路 1)明确反反爬的主要思路 反反爬的主要思路就是尽可能的去模拟浏览器,浏览器在如何操作,代码中就如何去实现;浏览器先请求了地址url1,保留了cookie在本地,之后请求地址u ...