jdbctemplate事务问题

在使用jdbctemplate的时候,执行了execute方法之后再执行batchUpdate,当batchUpdate抛出异常的时候,execute执行的sql没有办法回滚,图片的代码块是继承JdbcTemplate的业务对象里的方法,execute和batchUpdate都是jdbctemplate提供的,没有重写
有没有指点一手怎么样可以实现让这两个操作在一个事务里,或者其他的方法,只要能实现建表跟插入数据时,插入数据出错建表那块可以回滚就行

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章:jdbcTemplate.batchUpdate在批量执行的时候,性能差没有效果,看看怎么解决的。 也许能够解决你的问题,你可以看下
  • 以下回答由chatgpt基于相关博客总结生成:

    你可以通过使用Spring的声明式事务来解决这个问题。下面是实现的步骤:

    1. 配置事务管理器:在Spring配置文件中配置事务管理器Bean。例如,你可以使用DataSourceTransactionManager作为事务管理器。
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    1. 配置事务通知:在Spring配置文件中配置事务通知,将需要进行事务管理的方法加上事务注解。例如,你可以使用@Transactional注解来标记需要进行事务管理的方法。
    @Transactional
    public void executeAndBatchUpdate() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        jdbcTemplate.execute("CREATE TABLE ...");
        jdbcTemplate.batchUpdate("INSERT INTO ...", batchArgs);
    }
    
    1. 配置事务切点:在Spring配置文件中配置事务切点,指定需要进行事务管理的方法。
    <aop:config>
        <aop:pointcut id="transactionalMethods" expression="execution(* com.example.MyClass.executeAndBatchUpdate(..))" />
        <aop:advisor advice-ref="transactionInterceptor" pointcut-ref="transactionalMethods" />
    </aop:config>
    
    1. 启用注解驱动的事务管理:在Spring配置文件中启用注解驱动的事务管理。
    <tx:annotation-driven transaction-manager="transactionManager" />
    

    这样一来,当executeAndBatchUpdate()方法被调用时,会开启一个事务,如果其中的任何一个操作(创建表或者插入数据)失败,整个事务会回滚到开始的状态。

    希望以上解决方案能够帮助到你。如果你有任何其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^