为什么@Transactional无法在我的电源线上工作?

时间:2013-08-14 09:10:54

标签: spring transactions mybatis spring-transactions

我在项目中使用Spring + mybatis,并希望使用@Transactional来启动事务,因此我在dataSource.xml中添加了一些配置代码:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
    default-lazy-init="true">

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

    <bean id="oracletransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="oracledataSourceWrite"/>
    </bean>

这是我测试代码的一部分:

@Transactional
    public void testTransaction() throws Exception {
          // insert operation 1 without error
          // insert operation 2 with exception ,on purpose, such as some data too long for column in mysql
}

运行测试后,insert operation 1成功插入数据库,insert operation 2失败,因此Transaction不再工作,任何人都可以帮助我吗?

我在我的主要功能中测试它。

修改 最后,我使用TransactionProxyFactoryBean更改了另一种交易方式。

1 个答案:

答案 0 :(得分:1)

你必须像这样定义

@Transactional(rollbackFor=Exception.class)