Spring事务管理(二)
2021-01-21 14:13
标签:Requires 个数 eve oid red manage 回滚事务 tor 行操作 首先看一段源码org.springframework.transaction.PlatformTransactionManager中的方法的定义 可以知道在spring事务管理SPI(Service Provider Interface)的抽象层主要包含三个接口:分别是 PlatformTransactionManager,TransactionDefinition,TransactionStatus. TransactionDefinition主要定义了事务的隔离级别和事务的传播行为. TransactionStatus代表一个事务的具体运行状态.事务管理器可以通过该接口获取事务运行期的状态信息,也可以通过该接口间接的回滚事务.它相比于在抛出异常时会滚事务的方式更具可控性. 1:使用SpringJDBC或MyBatis 2:JPA 3:Hibernate不记 4:JTA 后续补充更详细的配置; PROPAGATION_REQUIRED=0 PROPAGATION_SUPPORTS=1 PROPAGATION_MANDATORY=2 PROPAGATION_REQUIRES_NEW=3 PROPAGATION_NOT_SUPPORTED]=4 PROPAGATION_NEVER=5 PROPAGATION_NESTED=6 注:在使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC3.0;并且实现者需要支持保存点事务机制. 编程式的事务管理:org.springframework.transaction.support.TransactionTemplate Spring事务管理(二) 标签:Requires 个数 eve oid red manage 回滚事务 tor 行操作 原文地址:https://www.cnblogs.com/xibushijie/p/12874980.htmlTransactionStatus getTransaction(@Nullable TransactionDefinition definition)
throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
事务
说明
JpaTransactionManager
使用Jpa持久化时,使用该事务管理器
HibernateTransactionManager
使用Hibernate版本进行持久化时,使用该事务管理器
DataSourceTransactionManager
使用SpringJDBC或Mybatis等基于DataSource数据源持久化时,使用该事务管理器
JdoTransactionManager
使用JDO进行持久化时,使用该事务管理器
JtaTransactionManager
具有多个数据源的全局事务使用该事务管理器(不管采用何种持久化技术)
context:property-placeholder location="classpath:jdbc.properties"/>
bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:userName="${jdbc.userName}"
p:password="${jdbc.password}"/>
bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
context:property-placeholder location="classpath:jdbc.properties"/>
bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:userName="${jdbc.userName}"
p:password="${jdbc.password}"/>
bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource"/>
bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"/>
事务传播行为类型:
事务传播行为类型
说明
如果没有当前事务,则新建一个事务;如果已经存在一个事务,则加入到这个事务中,这是最常见的选择
支持当前事务,如果没有当前事务,则以非事务方式执行
使用当前的事务.如果当前没有事务则抛出异常.
新建事务,如果当前存在事务,则把当前事务挂起.
以非事务的方式执行操作,如果当前存在事务,则把当前事务挂起.
P
以非事务的方式执行操作,如果当前存在事务,则抛出异常,
如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作
上一篇:学python不是一个入门教程就行,学之前你必须知道这些
下一篇:冒泡排序算法