我正在使用其中一种服务方法@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引发的Exception
是RuntimeException
,但事务却没有被回滚。我想通过在上面的场景中添加相同的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>
答案 0 :(得分:1)
使用@Transactional
注释所提供的易用性最好在此link
你必须添加:
<tx:annotation-driven transaction-manager="transactionManager" />