簡體   English   中英

@Transactional對於Spring中的任何異常

[英]@Transactional for any Exceptions in Spring

我正在尋找在Service方法之一上使用@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;
    }

我看了很多帖子,每一個說,春節僅處理RuntimeException S和未檢查Exception其他s比RmiException 我需要一種適用於任何Exception的解決方案。 有人建議我寫自己的注釋,而另一些人建議我將TransactionManager作為applicationContext.xml文件的一部分。 詳細的解決方案一定會對我有幫助。

順便說一下,我正在使用Spring JdbcTemplate 我觀察到的奇怪的事情是,盡管Spring引發的ExceptionRuntimeException但是事務沒有回滾。 我試圖通過在上述情況下添加同一User來引發Exception

我的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>

使用@Transactional批注提供的易用性在此鏈接中得到了最好的說明

您必須添加:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM