在使用jdbctemplate的时候,执行了execute方法之后再执行batchUpdate,当batchUpdate抛出异常的时候,execute执行的sql没有办法回滚,图片的代码块是继承JdbcTemplate的业务对象里的方法,execute和batchUpdate都是jdbctemplate提供的,没有重写
有没有指点一手怎么样可以实现让这两个操作在一个事务里,或者其他的方法,只要能实现建表跟插入数据时,插入数据出错建表那块可以回滚就行
你可以通过使用Spring的声明式事务来解决这个问题。下面是实现的步骤:
DataSourceTransactionManager
作为事务管理器。<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
@Transactional
注解来标记需要进行事务管理的方法。@Transactional
public void executeAndBatchUpdate() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute("CREATE TABLE ...");
jdbcTemplate.batchUpdate("INSERT INTO ...", batchArgs);
}
<aop:config>
<aop:pointcut id="transactionalMethods" expression="execution(* com.example.MyClass.executeAndBatchUpdate(..))" />
<aop:advisor advice-ref="transactionInterceptor" pointcut-ref="transactionalMethods" />
</aop:config>
<tx:annotation-driven transaction-manager="transactionManager" />
这样一来,当executeAndBatchUpdate()
方法被调用时,会开启一个事务,如果其中的任何一个操作(创建表或者插入数据)失败,整个事务会回滚到开始的状态。
希望以上解决方案能够帮助到你。如果你有任何其他问题,请随时提问。