
可以使用JdbcTemplate类的execute()方法重新执行SQL语句,将数据入库。通过JdbcTemplate的batchUpdate()方法,也可以实现批量添加数据的功能。SpringBoot还提供了其他的数据库 *** 作工具,如Hibernate、Mybatis等,也可以用来对数据库进行回滚 *** 作和添加数据。
spring 的事务回滚,一般都是用aop去做的,aop advice类型包括前置、后置、抛出异常和环绕。
一般需要回滚的情况多数是出了问题,包括出现了异常或者自定义的一些错误(当然自定义的错误也可以抛出自定义异常),如果采用异常或者自定义异常的的话,可以配置为代码抛出异常时,回滚事务。如果不愿意用监测异常的话,根据返回值来回滚事务,不过这种配置会麻烦一点,还不如采用异常回滚呢
单写一个接口,接口中再定义提交和回滚,在接口中判断。 比如有两个sql语句,第一个执行了后,判断是否有异常、错误。如果第一个出现异常等,那么直接就停止了。 若第一个sql执行通过了,第二个报错。那么你调用接口中的回滚就可以了。
使用Spring data jpa + mysql对Dao层的save()方法进行单元测试时,期望在测试完后进行回滚 *** 作,结果未回滚,去表里面查看,数据却成功插入。而Log日志显示已经进行了回滚 *** 作。日志如下:
将hibernatedialect配置成 hibernatedialect=orghibernatedialectMySQL5InnoDBDialect ,指定MYSQL建表的时候使用InnoDB引擎(支持事务安全),使用MySQL5InnoDBDialect方言在生成表结构的时候可以指定表的"ENGINE=InnoDB",而如果使用方言MySQL5Dialect,则在生成表结构的时候默认使用的是 ENGINE=MyISAM,该引擎不支持事务,即使程序中使用事务,也不起作用
2019-05-28
如果使用spring-test进行单元测试,它会自动回滚即@Rollback(value = true)
但是我在使用过程无论value为true/false,它都无作用
最后,因为spring没有取得事务控制,即aop没有,不能执行回滚
最后在配置文件
配置一个事务处理类:
<bean id="baseTxService" class="orgspringframeworktransactioninterceptorTransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="insert">PROPAGATION_REQUIRED</prop>
<prop key="save">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="update">PROPAGATION_REQUIRED</prop>
<prop key="remove">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
然后在具体的业务调用中继承这个类:
<bean id="magazineManager" parent="baseTxService">
<property name="target">
<bean class="comharmonymagazineserviceimplMagazineManager">
<property name="magazineDao">
<ref bean="magazineDao" />
</property>
</bean>
</property>
</bean>
这样的话,在MagazineManager中定义的方法在执行excute时若有错就会自动回滚。
以上就是关于springboot手动回滚之后再往库里添加数据全部的内容,包括:springboot手动回滚之后再往库里添加数据、spring事务什么时候会自动回滚、spring对多个事务进行统一回滚怎么配置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)