spring中的事务管理(一)
来源:互联网 发布:电脑软件怎么搬家 编辑:程序博客网 时间:2024/06/05 04:54
spring中的事务管理(一)
作为企业级应用程序框架,Spring 在不同的事务管理 API 之上定义了一个抽象层.而应用程序开发人员不必了解底层的事务管理 API, 就可以使用Spring 的事务管理机制.
编程式事务管理
使用原生的JDBC API进行事务管理
1.获取数据库连接Connection对象
2.取消事务的自动提交
3.执行操作
4.正常完成操作时手动提交事务
5.执行失败时回滚事务
6.关闭相关资源
Spring 既支持编程式事务管理, 也支持声明式的事务管理.
编程式事务管理: 将事务管理代码嵌入到业务方法中来控制事务的提交和回滚. 在编程式管理事务时, 必须在每个事务操作中包含额外的事务管理代码.
声明式事务管理: 大多数情况下比编程式事务管理更好用. 它将事务管理代码从业务方法中分离出来, 以声明的方式来实现事务管理. 事务管理作为一种横切关注点, 可以通过 AOP 方法模块化. Spring 通过 Spring AOP 框架支持声明式事务管理.
Spring 从不同的事务管理 API 中抽象了一整套的事务机制. 开发人员不必了解底层的事务 API, 就可以利用这些事务机制. 有了这些事务机制, 事务管理代码就能独立于特定的事务技术了.
Spring 的核心事务管理抽象是interface PlatformTransactionManager它为事务管理封装了一组独立于技术的方法. 无论使用 Spring 的哪种事务管理策略(编程式或声明式), 事务管理器都是必须的.
Spring中的事务管理器的不同实现
DataSourceTransactionManager:在应用程序中只需要处理一个数据源, 而且通过 JDBC 存取
JtaTransactionManager:在 JavaEE 应用服务器上用 JTA(Java Transaction API) 进行事务管理
HibernateTransactionManager:用 Hibernate 框架存取数据库
……
事务管理器以普通的 Bean 形式声明在 Spring IOC 容器中
用 @Transactional 注解声明式地管理事务
除了在带有切入点, 通知和增强器的 Bean 配置文件中声明事务外, Spring 还允许简单地用 @Transactional 注解来标注事务方法.
为了将方法定义为支持事务处理的,可以为方法添加 @Transactional 注解. 根据 Spring AOP 基于代理机制, 只能标注公有方法.
可以在方法或者类级别上添加@Transactional 注解. 当把这个注解应用到类上时,这个类中的所有公共方法都会被定义成支持事务处理的.
在 Bean 配置文件中只需要启用 <tx:annotation-driven> 元素, 并为之指定事务管理器就可以了.
如果事务处理器的名称是transactionManager, 就可以在<tx:annotation-driven> 元素中省略 transaction-manager 属性. 这个元素会自动检测该名称的事务处理器.
<!-- 配置事务管理器 -->
<beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--设置数据源 -->
<propertyname="dataSource"ref="dataSource"></property>
</bean>
<!--启用事务的注解支持 -->
<!--如果事务管理器的id属性值是transactionManager,transaction-manager属性就可以省略 -->
<tx:annotation-driven/>
用事务通知声明式地管理事务(xml)
<!-- 配置事务管理器 -->
<beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource"ref="dataSource"></property>
</bean>
<!--配置事务 -->
<tx:adviceid="txAdvice">
<!--配置添加事务的方法 -->
<tx:attributes>
<!--给具体的方法添加事务 -->
<tx:methodname="test"propagation="REQUIRED"/>
<!--给查询的方法添加事务 -->
<tx:methodname="get*"read-only="true"/>
<!--给所有的方法添加事务 -->
<tx:methodname="*"/>
</tx:attributes>
</tx:advice>
<!--配置中AOP -->
<aop:config>
<!--配置切入点表达式 -->
<aop:pointcutexpression="execution(* com.atguigu.service.*.*(..))"
id="pointCut"/>
<!--将添加的方法与切入点表达式关联 起来 -->
<aop:advisoradvice-ref="txAdvice"pointcut-ref="pointCut"/>
</aop:config>
- spring中的事务管理(一)
- spring拦截器中的事务管理(一)
- 事务以及Spring中的事务管理一
- [Spring]Spring中的事务管理
- Spring事务管理一:Spring事务管理的优点
- Spring事务管理(一)
- spring事务管理(一)
- Spring6:Spring中的事务管理
- Spring中的事务管理
- spring中的事务管理
- Spring中的事务管理方式
- Spring 中的事务管理
- spring框架中的事务管理
- Spring中的事务管理
- Spring中的事务管理
- Spring 中的事务管理
- Spring中的事务管理方式
- Spring中的事务管理
- res文件夹各目录
- java中FileInputStream与InputStream的available()方法的作用
- java各种版本的新特性,特别是java8
- 考研日记2017/11/22
- 《Java程序性能优化》第二章 读书笔记 I
- spring中的事务管理(一)
- 跨平台开源项目Ngui【简介】
- 关于《C语言程序设计现代方法》第15章例子“文本格式化”的理解
- 冒泡排序
- rnn的一个例子
- Swift数组定义和操作
- 沐枫NOI 2841. 棋盘(2017年普及组3)
- 语句
- https的安全证书与网页重写