Spring事务管理器分类

Spring提供两种事物的管理:程序控制事务管理和声明式事务管理。程序控制事务管理能更加精确的定义事务的边界;声明式事务限制在方法级上。通常,事务性需求都不会要求在精确的事务边界上进行,所以一般都选择声明式事务管理。
 
Spring并不直接管理事务,事实上,它是提供事务的多方选择。你能委托事务的职责给一个特定的平台实现,比如用JTA或者是别的持久机制。Spring的事务管理器可以用下表表示:

事务管理器的 实例
目标
Org.springframwork.jdbc.datasource.DataSourceTransactionManager
用DBC的 DataSource 去管理事务
Org.springframwork.orm.hibernate.HibernateTransactionManager
当持久机制是Hibernate时的事务管理器
Org.springframework.orm.jdoTransactionManager
当持久机制是JDO时的事务管理器
Org.springframework.transaction.jta.JtaTransactionManager
用JTA管理事务
Org.springframwork.orm.ojb.PersistenceBrokerTransactionManager
当持久机制是apache的OJB时的事务管理器
3.1  JDBC事务
如果你直接使用JDBC作为持久方案,DataSourceTransactionManager将会为你管理事务的边界。为了能使用DataSourceTransactionManager,我们把下面的XML加到上下文的定义中:
<bean id="transactionManager" class="org.springframework.jdbc.
   Datasource.DataSourceTransactionManager">
   <property name="dataSource">
        <ref bean="dataSource"/>
   </property>
</bean>
注意:dataSource的属性设置引用一个叫dataSource的BEAN,dataSource可能是一个javax.sql.DataSource bean,它在上下文中已经定义好了。
3.2 Hibernate事务
如果你使用Hibernate作为持久层,你将会使用HibernateTransactionManager,请在应用的上下文申明如下:
<bean id="transactionManaager" class="org.springframework.
Orm.hibernate.HibernateTransactionManager">
  <property name="sessionFactory">
       <ref bean="sessionFactory"/>
  </property>
</bean>
sessionFacoty 的属性和Hibernate的SessionFactory组合在一块儿。HibernateTransactionManager委托事务管理给一个 net.sf.hibernate.Transactioin事例,它从Hibernate的会话中获得。当一个事务成功结束时, HibernateTransactionManager会调用Transaction的commit()方法。相似的,一个失败的事务将会调用 rollback()去回滚。
3.3 JDO事务
可能你不喜欢JDBC 和Hibernate,你可以选择JDO去实现你的持久层。如果是这样的话,你可以用JdoTransctionManager,你可以在你的上下文中如下申明:
<bean id="transactionManager"
Class="org.springframework.orm.jdo.JdoTransactioinManager:>
   <property name="persistenceManagerFactory">
       <ref bean="persistenceManagerFactory"/>
   </property>
</bean>
为了使用JdoTransctionManager,你需要组合一个具有persistenceManagerFactory 属性的javax.jdo.PersistenceManagerFactory。
其实,JdoTransactionManager和事务对象一起工作,它是从JDO的持久管理器中获得。一个成功的事务会调用commit()方法,而一个失败的事务会调用rollback()方法。
3.4  JTA事务:
如果你上面所有的事务管理器都不符合你的需要,,或者你的应用是多资源交错的事务,那么.你可以使用JTA的事务管理器
JTA事务(Java Transaction API)是J2EE规范中有关事务的标准。它是容器级别的事务,只能运行在J2EE服务器中。它的最大优势是可以支持分布式的事务,如果系统采用的是分布式的数据库,那么只能选择JTA管理EntityManager事务。
<bean id="transactionManager" class="org.springframewrok..
     Transaction.jtaTransactionmanager">
    <property name="transactionManager">
         <value>java:/TransactionManager</valure>
    </property>
</bean>
JtaTransactionManager 委托事务管理给JTA的实现.JTA定义了一系列的标准接口;能协调事务,应用和一个或多个数据源. 在这之中, transactioinManageName属性指向JTA事务管理器. 这个事务管理器能在JNDI中找到. JtaTransactionManager, javax.transaction.UserTransaction和javax.transaction.TransactionManager对象在一起工作. 所有的事务管理委托给它们完成. 一个成功的事务将会被提交,通过调用UserTransaction.commit()方法,相反,一个失败的事务会调用UserTransaction 的rollback()方法.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springframework中的Tasklet是一个可执行的独立任务单元。它是Step中的一部分,用于执行特定的逻辑操作。Tasklet可以用于执行一系列的操作,如数据库操作、文件读写、网络请求等。 Tasklet是一个接口,定义了一个execute方法。我们可以实现这个接口,并在execute方法中编写任务逻辑。通过这种方式,我们可以将复杂的任务拆分成多个Tasklet,使得任务的执行更加灵活。 在Step中使用Tasklet时,可以通过TaskletStep类来配置。我们可以指定一个或多个Tasklet,并根据需要指定Tasklet的执行顺序。在Step的执行过程中,框架会按照指定的顺序依次执行Tasklet。 Tasklet执行的结果有三种:成功、失败和未分类。如果Tasklet的执行结果是成功,框架会继续执行下一个Tasklet或完成整个Step。如果Tasklet的执行结果是失败,框架可以根据需要进行异常处理或终止整个Step。如果Tasklet的执行结果是未分类,框架可以将其标记为一个特定的状态,以便后续处理。 使用Tasklet可以使得任务的执行更加灵活和可控。我们可以根据实际需求,自定义各种任务逻辑,并将其组合成复杂的任务流程。同时,Tasklet还提供了一些特定的方法,如支持事务管理、异常处理等,使得任务的执行更加可靠和健壮。 总之,springframework的Tasklet提供了一种简单而强大的方式来执行任务,并可以使得任务的执行更加可控和灵活。通过Tasklet,我们可以实现各种复杂的任务逻辑,提高系统的可维护性和扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值