Spring注解和非注解实现声明时事务处理功能
2016-06-24 18:16
519 查看
一、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>
例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>
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- 监听器获取Spring配置文件的方法
- Java利用Sping框架编写RPC远程过程调用服务的教程
- springmvc 发送ajax出现中文乱码的解决方法汇总
- SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
- 详解Java的MyBatis框架和Spring框架的整合运用
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao