简体   繁体   中英

Spring Transactional Rollback does not work

I have following Thread and transactional method, I have get thrown an exception to test rollback of insertion of DB but notthing is changed. What am I missing?

public class CleaningThread extends Thread {

   public void run() {
        try {
            doJob();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

     @Transactional(rollbackFor=Exception.class)
    private void doJob() throws Exception {

    //INSERT OPERATION
     final BatchSqlUpdate bs = new BatchSqlUpdate
     bs.flush()

     throw new Exception("Custom exception")

    //UPDATE

    }

    }

Application Context:

 <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>file:conf/offclear.properties</value>
        </list>
    </property>
</bean>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
</bean>

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

<bean id="cleaningThread" class="CleaningThread" scope="prototype"/>

Using Spring 3.1

You're invoking method doJob() from method run() of the same class. That's why you're working with real method, not proxied one.

Actually, this question was covered in this topic: One Service method invoke inner multiple method for Spring transaction

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM