深圳网站平台哪家强,网站 宣传方案,企业管理网站,如何做自助搜券网站编程式事务控制相关对象
PlatformTransactionManager
PlatformTransactionManager 接口是 spring 的事务管理器#xff0c;它里面提供了我们常用的操作事务的方法。注意#xff1a;
PlatformTransactionManager 是接口类型#xff0c;不同的 Dao 层技术则有不同的实现类 …编程式事务控制相关对象
PlatformTransactionManager
PlatformTransactionManager 接口是 spring 的事务管理器它里面提供了我们常用的操作事务的方法。注意
PlatformTransactionManager 是接口类型不同的 Dao 层技术则有不同的实现类 例如Dao 层技术是jdbc 或 mybatis 时org.springframework.jdbc.datasource.DataSourceTransactionManager
Dao 层技术是hibernate时org.springframework.orm.hibernate5.HibernateTransactionManager
TransactionDefinition
TransactionDefinition 是事务的定义信息对象里面有如下方法
事务隔离级别
设置隔离级别可以解决事务并发产生的问题如脏读、不可重复读和虚读。 ISOLATION_DEFAULT ISOLATION_READ_UNCOMMITTED ISOLATION_READ_COMMITTED ISOLATION_REPEATABLE_READ ISOLATION_SERIALIZABLE
事务传播行为 REQUIRED如果当前没有事务就新建一个事务如果已经存在一个事务中加入到这个事务中。一般的选择默认值 SUPPORTS支持当前事务如果当前没有事务就以非事务方式执行没有事务 MANDATORY使用当前的事务如果当前没有事务就抛出异常 REQUERS_NEW新建事务如果当前在事务中把当前事务挂起。 NOT_SUPPORTED以非事务方式执行操作如果当前存在事务就把当前事务挂起 NEVER以非事务方式运行如果当前存在事务抛出异常 NESTED如果当前存在事务则在嵌套事务内执行。如果当前没有事务则执行 REQUIRED 类似的操作 超时时间默认值是-1没有超时限制。如果有以秒为单位进行设置 是否只读建议查询时设置为只读
TransactionStatus
TransactionStatus 接口提供的是事务具体的运行状态
基于 XML 的声明式事务控制
什么是声明式事务控制
Spring 的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明就是指在配置文件中声明用在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。
声明式事务处理的作用 事务管理不侵入开发的组件。具体来说业务逻辑对象就不会意识到正在事务管理之中事实上也应该如此因为事务管理是属于系统层面的服务而不是业务逻辑的一部分如果想要改变事务管理策划的话也只需要在定义文件中重新配置即可 在不需要事务管理的时候只要在设定文件上修改一下即可移去事务管理服务无需改变代码重新编译这样维护起来极其方便
注意Spring 声明式事务控制底层就是AOP。
声明式事务控制的实现
①引入tx命名空间
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:aophttp://www.springframework.org/schema/aopxmlns:txhttp://www.springframework.org/schema/txxmlns:phttp://www.springframework.org/schema/pxsi:schemaLocationhttp://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://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd②配置事务增强 ③配置事务 AOP 织入 bean idtxm classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdatasource//beantx:advice idinterceptor transaction-managertxmtx:attributestx:method namesave isolationDEFAULT propagationREQUIRED timeout-1 read-onlyfalse//tx:attributes/tx:adviceaop:configaop:pointcut idpc expressionexecution( void com.ImplService.*(..))/aop:advisor advice-refinterceptor pointcut-refpc//aop:config④测试事务控制转账业务代码
Service(service)
Scope(singleton)
public class ImplService implements com.Service {AutowiredQualifier(impl)ImplDao dao;public void save() {dao.out();dao.in();}}
Repository(impl)
Scope(singleton)
public class ImplDao implements Dao {AutowiredJdbcTemplate jdbcTemplate;public void save() {System.out.println(saving);}public void in(){jdbcTemplate.update(update account set moneymoney500 where nametony);}public void out(){jdbcTemplate.update(update account set moneymoney-500 where namejohn);}
}RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(classpath:applicationContext.xml)
public class SpringJunitTest {AutowiredService service;Testpublic void test(){service.save();}}
切点方法的事务参数的配置
!--事务增强配置--
tx:advice idtxAdvice transaction-managertransactionManagertx:attributestx:method name*//tx:attributes
/tx:advice其中tx:method 代表切点方法的事务参数的配置例如
tx:method nametransfer isolationREPEATABLE_READ propagationREQUIRED timeout-1 read-onlyfalse/name切点方法名称 isolation:事务的隔离级别 propogation事务的传播行为 timeout超时时间 read-only是否只读
基于注解的声明式事务控制
Service(service)
Scope(singleton)
public class ImplService implements com.Service {AutowiredQualifier(impl)ImplDao dao;Transactional(propagation Propagation.REQUIRED,isolation Isolation.REPEATABLE_READ,timeout -1,readOnly false)public void save() {dao.out();/* int i1/0;*/dao.in();}}
Repository(impl)
Scope(singleton)
public class ImplDao implements Dao {AutowiredJdbcTemplate jdbcTemplate;public void save() {System.out.println(saving);}public void in(){jdbcTemplate.update(update account set moneymoney500 where nametony);}public void out(){jdbcTemplate.update(update account set moneymoney-500 where namejohn);}
}RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(classpath:applicationContext.xml)
public class SpringJunitTest {AutowiredService service;Testpublic void test(){service.save();}}
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:aophttp://www.springframework.org/schema/aopxmlns:txhttp://www.springframework.org/schema/txxmlns:phttp://www.springframework.org/schema/pxsi:schemaLocationhttp://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://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
context:property-placeholder locationjdbc.properties/context:component-scan base-packagecom/tx:annotation-driven transaction-managertxm/bean idjdbc classorg.springframework.jdbc.core.JdbcTemplateproperty namedataSource refdatasource//beanbean iddatasource classcom.mchange.v2.c3p0.ComboPooledDataSourceproperty namedriverClass value${jdbc.driver}/property namejdbcUrl value${jdbc.url}/property nameuser value${jdbc.username}/property namepassword value${jdbc.password}//beanbean idtxm classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdatasource//bean/beans注解配置声明式事务控制解析
①使用 Transactional 在需要进行事务控制的类或是方法上修饰注解可用的属性同 xml 配置方式例如隔离级别、传播行为等。
②注解使用在类上那么该类下的所有方法都使用同一套注解参数配置。
③使用在方法上不同的方法可以采用不同的事务参数配置。
④Xml配置文件中要开启事务的注解驱动tx:annotation-driven /
知识要点
注解声明式事务控制的配置要点 平台事务管理器配置xml方式 事务通知的配置Transactional注解配置 事务注解驱动的配置 tx:annotation-driven/