Spring声明式事务处理
来源:互联网 发布:java if 缩写 编辑:程序博客网 时间:2024/05/21 01:32
spring框架下的项目,事务处理都是由spring框架来自动实现,程序员只需要关心实现增删改查曾操作就可以。二者结合在一起就形成了代理对象,这也是面向切面编程的思想。
声明:程序员告诉spring哪些类需要事物,哪些类不需要事物。
事务处理:spring来进行实际的事务处理操作。
通过<tx:advice id="txAdvice" transaction-manager="transactionManager"> </tx:advice> 事务管理器标签进行通知
1、告诉spring容器采用什么样的方法处理事务。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!-- 数据库驱动 -->
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<!-- 数据库地址 -->
<!-- ?useUnicode=true&characterEncoding=utf-8是将编码格式改成utf-8 -->
<!-- 如果报:The reference to entity "characterEncoding" must end with the ';' delimiter.错误,说明无法解析xml中的特殊符号,而且要;结尾。转换:&=& -->
<property name="url" value="jdbc:mysql://localhost:3306/gmo?useUnicode=true&characterEncoding=utf-8" />
<!-- 用户名密码 -->
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 声明一个bean,将dataSource注入进来、告诉spring容器,采用什么样的方式处理事务 ,这里用的是mysql方式-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
2、告诉spring容器,目标方法采用什么样的事务处理策略。
<!-- 通知:
告诉spring容器,目标方法采用什么样的事物处理策略
-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- name=方法名,isolation隔离机制,默认DEFAULT,一般不需写。
propagation传播属性默认REQUIRED,一般不需要写
read-only=true只读事物
rollback-for="java.lang.Exception"回滚
-->
<tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<!-- 除了以上方法,其他方法一律是只读方法 -->
<tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
<tx:method name="get*" propagation="REQUIRED" read-only="true"/>
<tx:method name="query*" propagation="REQUIRED" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 声明切面目标类,配置哪些类的方法需要进行事务管理 -->
<aop:config proxy-target-class="true">
<!-- 切入點是素有service下的类 -->
<aop:pointcut expression="execution(* cn.forlink.service..*(..))" id="pointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>
spring所有的事物处理都是实现了PlatformTransactionManager接口。
我们来看一下这个接口底层的源码:
public interface PlatformTransactionManager
{
public abstract TransactionStatus getTransaction(TransactionDefinition transactiondefinition)
throws TransactionException;
public abstract void commit(TransactionStatus transactionstatus)
throws TransactionException;
public abstract void rollback(TransactionStatus transactionstatus)
throws TransactionException;
}
这个接口实现了1、获取事物2、提交事物3、回滚事物。
暂时先记录一部分,过一段时间再来修改>_<
- Spring 声明式事务处理
- spring 声明式事务处理
- 《Spring》------声明式事务处理
- Spring声明式事务处理
- Spring的事务处理之声明式事务处理
- Spring 的声明式事务处理
- Spring声明式事务处理理解
- Spring的声明式事务处理
- Spring——声明式的事务处理
- spring声明式事务处理(hibernate)
- Spring源代码解析(六):Spring声明式事务处理
- Spring源代码解析(六):Spring声明式事务处理
- Spring源代码解析(六):Spring声明式事务处理
- Spring学习心得(23)-- spring声明式事务处理(hibernate)
- Spring+Hibernate延迟和声明式事务处理最终解决方案
- Spring+Hibernate延迟和声明式事务处理最终解决方案
- 【Spring七】JDBC编程之声明式事务处理
- Spring学习之声明式事务处理实例(DriverManagerDataSource注入)
- 封装$(id)函数
- Java表达式的陷阱——多线程的陷阱
- How to install OpenCV
- vue环境搭建
- G Divideing Jewels(多重背包)
- Spring声明式事务处理
- 程序员成长必杀技,怎么找到想要的资源?
- 2017.4.25 解方程 思考记录
- IIC总线时序(结合AT24C02)
- java.lang.reflect.MalformedParameterizedTypeException
- struts2出现Error setting expression解决办法
- 文本分类的算法总结
- Linux 下安装 Redis 服务器
- java基础面试题