spring事务和对象锁
来源:互联网 发布:中国历史故事网软件 编辑:程序博客网 时间:2024/04/28 04:46
对象锁(Lock/synchronized)的注意点:
1.对象锁可能锁住的范围比较大,导致接口性能下降,造成线程阻塞;
2.对象锁的唯一性问题,如果不是全局唯一锁(使用spring容器对象或static对象只能保证同一服务器唯一,不能保证全局唯一),将起不到锁的作用,最好使用分布式锁;
spring事务:
spring事务本质上使用数据库事务,而数据库事务本质上使用数据库锁,所以spring事务本质上使用数据库锁,开启spring事务意味着使用数据库锁;
spring事务实际使用AOP拦截注解方法,然后使用动态代理处理事务方法,捕获处理过程中的异常,spring事务其实是把异常交给spring处理;
spring事务只有捕获到异常才会终止或回滚,如果你在程序中try/catch后自己处理异常而没有throw,那么事务将不会终止或回滚,失去事务本来的作用;
spring事务会捕获所有的异常,但只会回滚数据库相关的操作,并且只有在声明了rollbackForClassName="Exception"之类的配置才会回滚;
spring事务会回滚同一事务中的所有数据库操作,本质上是回滚同一数据库连接上的数据库操作;
spring事务总结:
spring事务本质上使用数据库锁;
spring事务只有在方法执行过程中出现异常才会回滚,并且只回滚数据库相关的操作;
对象锁和spring事务的对比:
对象锁可以保证数据一致性和业务逻辑正确性,但不能保证并发性;
spring事务不能严格保证数据一致性和业务逻辑正确性,但具有较好的并发性,因为只锁数据库行数据;
建议:
如果只有insert操作,可以使用事务;
如果涉及update操作但不涉及其他业务逻辑,可以保守使用事务;
如果涉及update操作及其他业务逻辑,慎用事务,
并且数据库查询跟数据库更新之间尽量间隔较短,中间不宜插入太多其他逻辑,减少数据一致性的风险;
对数据一致性要求不高的情况下可以使用事务结合乐观锁,否则建议用锁;
spring事务为什么不能保证数据一致性和业务逻辑正确性:
1.如果事务方法抛异常,此时会回滚数据库操作,但已经执行的其他方法不会回滚,因此无法保证业务逻辑正确性;
2.即使事务方法不抛异常,也不能保证数据一致性(因为事务接口里的数据库操作在整个接口逻辑执行结束后才提交到数据库,在接口最后提交到数据库的前后很有可能带来数据一致性的问题),从而不能保证业务逻辑正确性;
0 0
- spring事务和对象锁
- 正确理解Spring事务和数据库事务和锁
- Spring事务和Activiti事务
- 数据库事务 和spring事务
- Oracle事务和Spring事务区别
- spring事务传播机制和嵌套事务
- Spring事务配置和事务传播类型
- javasql事务隔离,和spring事务传播
- spring事务和myBatis事务的设置
- spring事务和myBatis事务的设置
- Spring事务隔离和事务传播
- spring管理事务声明式事务和编程式事务
- spring事务和传播属性
- spring的AOP和事务
- spring的AOP和事务
- spring的AOP和事务
- spring的AOP和事务
- 无需容器的对象关系映射 ------->用 Hibernate 和 Spring 开发事务持久层
- 飞得更高(五)下马威
- 点阵字库在JAVA中的实现
- effective--构造器和静态工厂方法
- Spring4整合Hibernate5
- HTML5/CSS3 移动平台对 META 标签的定义
- spring事务和对象锁
- HDU 3652 B-number(*数位DP)
- windows_redis
- Spring Boot 学习笔记(九) 数据缓存
- Log4 日志级别
- ExpressionTreeViewer安装与碰到的问题
- Spring3与hibernate4 整合 (No Session found for current thread)
- 题目1480:最大上升子序列和
- Activity的onActivityResult 接收不到返回结果的解决办法