Spring注解和非注解实现声明时事务处理功能

来源:互联网 发布:js循环数组赋值 编辑:程序博客网 时间:2024/05/16 17:04

一、Spring注解和非注解实现事务处理功能

 

 

例1:使用注解实现事务处理

Spring配置文件中配置事务管理类,并添加对注解配置的事务的支持

<!-- 当容器开启时打开注解  -->

<context:component-scan base-package="com.yh.ssh.dao,com.yh.ssh.biz,com.yh.ssh.action">

</context:component-scan>

<!-- sessionFactory注入事务管理器 -->

<bean id="txManager" class="org.springframework.orm.hibernate3 .HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

<!-- 注释驱动 -->

<tx:annotation-driven transaction-manager="txManager" />

使用@Transactional为方法添加事务支持

@Transactional(propagation=Propagation.REQUIRED)

public void addBathUser(List<Users> us) {

// TODO Auto-generated method stub

for (Users users : us) {

userDao.saveUser(users);

}

}

a.  }propagation 枚举型:Propagation

可选的传播性设置。使用举例:@Transactional(propagation=Propagation.REQUIRES_NEW)

b. isolation 枚举型:Isolation

可选的隔离性级别。使用举例:@Transactional(isolation=Isolation.READ_COMMITTED)

c. readOnly 布尔型                 

是否为只读型事务。使用举例:@Transactional(readOnly=true)

d. timeout  int型(以秒为单位)

事务超时。使用举例:Transactional(timeout=10)

e. rollbackFor 一组 Class 类的实例,必须是Throwable的子类

一组异常类,遇到时 必须 回滚。使用举例:@Transactional(rollbackFor={SQLException.class}),多个异常用逗号隔开

f. rollbackForClassName 一组 Class 类的名字,必须是Throwable的子类

一组异常类名,遇到时 必须 回滚。使用举例:@Transactional(rollbackForClassName={"SQLException"}),多个异常用逗号隔开

g. noRollbackFor 一组 Class 类的实例,必须是Throwable的子类

一组异常类,遇到时 必须不 回滚

h. noRollbackForClassName 一组 Class 类的名字,必须是Throwable的子类

一组异常类名,遇到时 必须不 回滚

例2:使用非注解实现事务处理

业务类

public void addBathUser(List<Users> us) {

// TODO Auto-generated method stub

for (Users users : us) {

userDao.saveUser(users);

}

}

Spring容器配置信息,编制事物规则,利用该规则编写切面,而后织入

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sf"></property>

</bean>

<!-- 事务规则  -->

<tx:advice id="txadvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="find*" read-only="true" />

<tx:method name="add*" propagation="REQUIRED" />

</tx:attributes>

</tx:advice>

 <!-- 织入 -->

<aop:config>

<aop:pointcut expression="execution(* com.yh.ssh.biz.*.*(..))" id="pc" />

<aop:advisor advice-ref="txadvice" pointcut-ref="pc" />

</aop:config>

 

 

 

0 0
原创粉丝点击