@Transactional for Spring中的任何异常

时间:2015-11-19 14:48:53

标签: java spring transactions

我正在使用其中一种服务方法@Transactional。但是,当发生异常时,事务不会回滚。我用@Transactional(rollbackFor=Exception.class)尝试了同样的方法。我的代码如下: -

    @Override
    @Transactional(rollbackFor=Throwable.class)
    public boolean addUser(User user) throws Exception{
        boolean userAdded = userDao.addUser(user);                  
        boolean userRegistrationRecorded = userDao.recordUserRegistraionDetails(user);      
        return true;
    }

我阅读了很多帖子,每个帖子都说Spring只处理RuntimeException个而不是Exception以外的RmiException。我需要一个适用于任何类型Exception的解决方案。有人建议我编写自己的注释,其他人建议将TransactionManager作为applicationContext.xml文件的一部分。一个详细的解决方案肯定会帮助我。

顺便说一句,我使用Spring JdbcTemplate。我观察到的奇怪的事情是,虽然Spring引发的ExceptionRuntimeException,但事务却没有被回滚。我想通过在上面的场景中添加相同的Exception来提升User

我的applicationContext.xml如下: -

<context:component-scan base-package="org.chaperone.services.security.*" />

    <context:annotation-config />

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

    <bean id="propertyPlaceholderConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="searchSystemEnvironment" value="true" />
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="${DATABASE_URL}" />
        <property name="username" value="${DATABASE_USER_NAME}" />
        <property name="password" value="${DATABASE_PASSWORD}" />
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>

1 个答案:

答案 0 :(得分:1)

使用@Transactional注释所提供的易用性最好在此link

中说明

你必须添加:

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