spring事务管理

简单说说spring的事务机制,以及是如何管理的?

只愿长相守 提交于 2020-02-01 08:32:58
事务管理可以帮助我们保证数据的一致性,对应企业的实际应用很重要。 Spring的事务机制 包括 声明式事务 和 编程式事务。 编程式事务管理:Spring推荐使用 TransactionTemplate , 实际开发中使用声明式事务较多。 声明式事务管理 :将我们从复杂的事务处理中解脱出来,获取连接,关闭连接、事务提交、回滚、异常处理等这些操作都不用我们处理了,Spring都会帮我们处理。 声明式事务管理使用了AOP面向切面编程实现的 ,本质就是在目标方法执行前后进行拦截。在目标方法执行前加入或创建一个事务,在执行方法执行后,根据实际情况选择提交或是回滚事务。 如何管理的: Spring事务管理主要包括3个接口 ,Spring的事务主要是由他们三个共同完成的。 1) Platform TransactionManager :事务管理器--主要用于平台相关事务的管理 主要有三个方法:commit 事务提交; rollback 事务回滚; getTransaction 获取事务状态。 2)TransactionDefinition:事务定义信息--用来定义事务相关的属性,给事务管理器PlatformTransactionManager使用 这个接口有下面四个主要方法: getIsolationLevel:获取隔离级别; getPropagationBehavior:获取传播行为;

spring-jdbc-aop事务

 ̄綄美尐妖づ 提交于 2020-02-01 08:32:27
1 spring整合JDBC 1.1 概述 spring提供了很多模板整合Dao技术 spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模板对象 与DBUtils中的QueryRunner非常相似. 1.2 步骤 导包 4+2 spring-test spring-aop junit4类库 c3p0连接池 JDBC驱动 spring-jdbc spring-tx事务 准备数据库 书写Dao 增删改 查询单个对象 查询值类型 查询list集合类型 spring配置 依赖关系 测试 1.3 JDBCDaoSupport 和读文件 JDBCDaoSupport 读取外部的Properties配置 2 spring中aop事务 2.1 事务 事务特性 :acid 事务并发问题 :脏读 不可重复读 幻读 事务的隔离级别 1 读未提交 2 读已提交 4 可重复读 8 串行化 2.2 spring封装了事务管理代码 事务操作 打开事务 提交事务 回滚事务 事务操作对象 因为在不同平台,操作事务的代码各不相同.spring提供了一个接口 PlatformTransactionManager 接口★★ DataSourceTransactionManager HibernateTransitionmanager 注意

Spring中的事务控制

橙三吉。 提交于 2020-02-01 01:13:01
前言 J2EE的事务管理位于业务层,Spring提供了分层设计业务层的事务处理解决方案。 spring为我们提供了一组事务控制的接口,这组接口是在spring-tx-5.0.2.RELEASE.jar中。 spring的事务控制都是基于AOP的,既可以用编程方式实现,也可以通过配置实现,重点是是基于配置的。 PlatformTransactionManager TransactionDefinition是事务的定义信息,里面有 获取事务对象名称 getName() 获取事务隔离级别 getIsolationLevel() 获取事务传播行为 getPropagationBehavior() 获取事务超时时间 getTimeout() 获取事务是否只读 isReadOnly() xml配置型 注解型 来源: CSDN 作者: 番茄发烧了 链接: https://blog.csdn.net/bless2015/article/details/103940430

Spring(13)_事务控制

我的梦境 提交于 2020-01-31 03:00:20
本系列博客汇总在这里: Spring 汇总 事务控制 一、什么是事务 二、Spring 使用注解对事务的控制 1、来处理事务传播特性 第一步 第二步 2、事务的并发 并发问题 脏读(dirty read) 不可重复读(unrepeatable read) 幻读(phantom read) 第一类更新丢失 第二类更新丢失 3、事务的隔离级别 三、使用配置文件对事务控制 源码工程文件为:spring3.2_10 & spring3.2_11 & spring3.2_12 & spring3.2_13 一、什么是事务 一荣俱荣,一损俱损,很多复杂的操作我们可以把它看成是一个整体,要么同时成功,要么同时失败。 事务的四个特征ACID 原子性(Atomic):表示组成一个事务的多个数据库的操作的不可分割的单元,只有所有的操作成功才算成功,整个事务提交,其中任何一个操作失败了都是导致整个所有操作失败,事务会回滚。 一致性(Consistentcy):事务操作成功后,数据库所处的状态和业务规则一致。如果A账户给B账户汇 100,A 账户减去 100,B 加上 100,两个账户的总额是不变的。 隔离性(islation):在多个数据库的操作相同的数据并发时,不同的事务有自己的数据空间,事务与事务之间不受干扰(不是绝对的)。干扰程度受数据库或者操作事务的隔离级别来决定,隔离级别越高,干扰就越低

Spring注解方式管理事务以及事务传播行为Propagation(视频笔记23)

大憨熊 提交于 2020-01-29 12:19:05
使用@Transactional注解声明Bean底下所有业务方法需要事务管理。 1.默认一个业务方法开启和结束事务,什么时候提交,什么时候回滚呢? Spring容器默认情况下对于运行期异常(unchecked Exception)会进行事务回滚,如果是用户违例(checked Exception),事务不会回滚。 运行期违例:throw new RuntimeException("XXX");运行期违例不需要使用try/catch捕捉,编译可以通过 用户违例,throw new Exception("XXX");必须使用try/catch捕捉,否则编译不能通过。 也可以修改这种行为,在业务方法上加上@Transactional(rollbackFor=Exception.class),则cheked Exception也会回滚。 如果@Transactional(noRollbackFor=RuntimeException.class),则运行期例外也不会回滚。 2.有些业务方法不需要业务管理,如获取数据的。开启事务会对性能有影响。所以使用 @Transactional(propagation=Propagation.NOT_SUPPORTED) propagation属性指定事务的传播行为。则Spring容器在该业务方法前不会开启事务。 事务的传播属性 : (1

@Transactional注解

喜欢而已 提交于 2020-01-29 05:09:05
@Transactional注解 一.事物传播行为介绍: @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)   @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启事务   @Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务   @Transactional(propagation=Propagation.MANDATORY) :必须在一个已有的事务中执行,否则抛出异常   @Transactional(propagation=Propagation.NEVER) :必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)   @Transactional(propagation=Propagation.SUPPORTS) :如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务. 二.事物超时设置: @Transactional(timeout=30) /

hibernate整理

泪湿孤枕 提交于 2020-01-28 17:19:24
国外框架项目地址:http://websystique.com/springmvc/spring-mvc-4-angularjs-example/Angularjs文本输入框用ng-moduel,其他的用{{ }}放行用.*?Angularjs插件地址http://www.cnblogs.com/pilixiami/p/5634405.htmlUI班的教程:http://pan.baidu.com/share/link?shareid=4146906997&uk=866705889非严格读写是并发的概念Spring不支持多线程Flush()强制要求缓存与数据库一致Eache表连接,lazy子查询ORM: 编写程序时,以面向对象的方式处理数据 保存数据时是以关系型数据库的方式存储的Hibernate的数据持久化: New实例化对象时默认是瞬时的 Jdbc连接数据库时,持久化数据 将数据存入硬盘单向关联关系: 一个类单方向包含另一个类为属性,模拟数据库外键mysql数据库附加:String driver=com.mysql.jdbc.DriverString url=jdbc:mysql://localhost:3306/demohibernate注入: 实体类(1)这个表示一个实体类,Table表示对应数据库中的表名。@Entity@Table(name="t_emp")(2

Spring AOP 浅谈

家住魔仙堡 提交于 2020-01-28 11:08:12
Spring AOP & JAVA浅谈 由来 AOP简单概念 核心切片概念 总结 JAVA浅谈) 由来 Spring框架及衍生产品广泛地应用于商业级工程项目,大家聊起Spring时往往离不开IOC(Inversion Of Control)与AOP(Aspect-oriented Programming), Spring的普及以及其对@AspectJ表达式的支持在一定程度上掩盖了纯粹AspectJ框架的光芒,甚至一定程度上模糊了开发人员对面向切面编程的认知,本文以Spring AOP为例,尝试以尽可能简洁的言语介绍AOP这一门技术及其在一个商业级项目的用途以及指出Spring AOP 与其他编译级AOP框架的区别。 注:本文仅包含作者本文理解,各位大佬有任何不同见解欢迎留言指导 AOP简单概念 AOP(aspect oriented programming)是对OOP(object oriented programming)编程思想的补充。在面向对象的世界中,编程的关注点在类(Class)上,或者说 ——类文件是关键的模块单元。这种编程方式很大程度地加强了代码的复用性(或许任何一门编程语言都是以 减少重复工作 作为目标演变的)。而AOP编程思想的关键模块单元为切面,关于切面的描述有很多,从 Spring Reference Documentation 中 Aspects

spring整合mybatis

允我心安 提交于 2020-01-26 08:18:47
spring整合mybatis的applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http:

用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?

不羁岁月 提交于 2020-01-25 03:42:12
1. 数据库引擎不支持事务 这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。 根据 MySQL 的官方文档: https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html 从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是白搭。 2. 数据源没有配置事务管理器 @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } 如上面所示,当前数据源若没有配置事务管理器,那也是白搭! 3. 没有被 Spring 管理 如下面例子所示: // @Service public class OrderServiceImpl implements OrderService { @Transactional public void updateOrder(Order order) { // update order } }