采用Spring注解方式, 实现事务

来源:互联网 发布:开淘宝c店 编辑:程序博客网 时间:2024/05/01 15:23

一、前提

spring配置文件分为两个:web容器配置文件和逻辑容器配置文件

逻辑容器配置文件包含了如下配置:

<bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="cfmDataSource" /></bean>   <tx:annotation-driven transaction-manager="txManager"/>

二、使用注解@Transactional实现事务的注意点

1、请确认事务与逻辑注解扫描在同一个容器里,这样才能保证事务的正常开启。(例如:误将注解都扫描在web容器,但是web容器没有配置事务,事务是配置在逻辑容器里,这样导致事务没有开启)。

修改前:

    <context:component-scan base-package=“com.hcb.confirmation”/>

修改后:

    <context:component-scan base-package="com.hcb.confirmation">

        <context:exclude-filter type="annotation" expression="javax.inject.Named"/>

    </context:component-scan>

2、是否回滚规则如下: 

默认遇到throw new RuntimeException("...");会回滚 
需要捕获的throw new Exception("...");不会回滚
 

如果Exception也需要回滚,那么这样声明注解:@Transactional(rollbackFor=Exception.class)

3、如果用mysql数据库,Engine需要设置为InnoDB格式,自动建表的格式为:MyISAM,这中格式的是不支持事务管理的。

show engines;

show variables like '%storage_engine%';

show create table tablename;

4、与声明式的事务不同,注解方式不需要引用aspectj的jar

参考文章:http://www.th7.cn/Program/java/201208/88393.shtml


0 0