我的@Transactional
方法存在问题。执行此方法后 - 将新记录插入到表中,并且在异常
@RestController
@RequestMapping("/rest")
public class TestController {
@Autowired
private TestMapper testMapper;
@Transactional
@RequestMapping("/test")
String test() {
TestObj obj = new TestObj();
obj.setName(new Date().toString());
testMapper.insert(obj);
int i = 1 / 0; // doing exception
return obj.toString();
}
}
我的xml配置:
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/test"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.mapper"/>
</bean>
我错过了什么吗?我只是希望DB在我的方法中发生异常时保持不变
修改
问题是该方法未定义为public
答案 0 :(得分:0)
抛出新的RuntimeException并将注释更改为@Transactional(rollbackFor=Exception.class)
。
答案 1 :(得分:0)
我们遇到过这种问题,这里是我们用它可以帮助你的。请注意,我们依赖于ApplicationServer:
<!-- Initialize MyBatis Session Factory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- Plug datasource and mapperLocations -->
<property name="dataSource" ref="dataSource" />
<property name="transactionFactory">
<bean
class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</property>
</bean>