@Transactional spring事务回滚相关
2024-09-01 14:36:07
还可以设置回滚点,看下面
/**
* 用户登录接口
*
*
* 1明确事务方法前的命名规则
* 2保证事务方法执行的时间尽可能的短,不允许出现循环操作,不允许出现RPC等网络请求操作
* 3不允许所有的方法都使用事务,节省服务器性能和缩短数据库连接时间
* 4如果出现有多个地方需要事务回滚时,使用自定义或原有的异常进行抛出,异常必须继承RunTimeError,否则不会触发回滚操作
* 5使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动回滚
*
*/
@Transactional
public UserModel login(UserModel user){ UserModel userEntity = new UserModel(); userEntity = userDao.login(user);
if(userEntity == null)
{
return null;
} userEntity = userDao.login(user);
if(userEntity == null)
{
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return null;
}
else
{
return userEntity;
}
}
直接给出一个例子代码,上面只是记录一下,下面才是干货。
首先很多时候我们不会采用事务操作,但是当我们在一个服务层多次访问数据库特别是进行插入删除操作的时候,我们需要使用事务进行操作,也就是一个不成功,所有的操作全部回滚。
那么具体的事务特性我就不多说了,规范我也打在最上面的注释里面了。主要注意一下,
使用@Transactional 注解
如果第一次插入成功,第二次插入失败,执行TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 这条语句之后,第一次的插入动作就被回滚了,也就是并没有生效。
手动回滚看起来会比较实用一些。
然后对于抛出异常的那种自动回滚可以参考百度各种代码。比较麻烦一些,就不列举了。
补充一下:
使用Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
设置回滚点,使用TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);回滚到savePoint。
后序补充详细属性配置(复杂)
</div>
转载:https://blog.csdn.net/meandmyself/article/details/77366945
最新文章
- iOS:WebKit内核框架的应用与解析
- ganglia安装-yum
- proxy 出现乱码问题解决 lua
- Dapper快速学习
- SDP简要解析
- hdu1867A + B for you again
- dedecms一些技巧
- .net mvc笔记1_ The MVC Pattern
- ajax获取的全部是object,我要获取的是json
- SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
- Linux安装mysql 在/etc下没有my.cnf 解决办法
- Bootstarp-table入门
- 如何在ASP.NET Core中使用Azure Service Bus Queue
- 【LOJ6060】【2017 山东一轮集训 Day1 / SDWC2018 Day1】Set 线性基
- Go基础系列:struct的导出和暴露问题
- PowerMock单元测试踩坑与总结
- mui---获取上一级窗口
- 由于想要实现下载的文件可以进行选择,而不是通过<;a>;标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。
- 利用Gson将JSON数据进行格式化(pretty print)
- 446. Arithmetic Slices II - Subsequence
热门文章
- JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型
- Django入门------常见问题
- js获取当前日期并格式yyy-MM-dd
- OGG-01877 Missing explicit accessrule for server collector
- C代码输出日志
- SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
- 第一个python-ui界面
- 实验一part1.1 1.2
- MSSQL字符串取相应的第几个数组值
- 【AMAD】stackprint -- 为Python加入利于调试的traceback信息