Redis之坑:spring-data-redis中的Redis事务
Redis之坑:理解Redis事务
Redis之坑:Redis与MySQL中事务的区别
Transaction之坑:数据库事务
Transaction之坑:Spring中配置Transaction与不配置有何区别
Transaction之坑:分析sql执行结果,主动促使事务rollback
首先
Spring中 Transaction管理
配置有两种方式:
- Annotation式:
@Transactional
- Xml式:
<tx:method />
Note: 以下所有讨论,都是用
@Transactional
方式来开启Transaction支持
。
问题
- 什么样的
mehtod
需要配置注解@Transactional
? method
没有配置注解@Transactional
, 难道sql操作
就不会被commit
?
解决
-
配置
@Transactional
的目的就是手动开启事务,保证method
中一系列sql操作
包含在同一事务中,从保证数据的完整性(回滚或提交)与读写安全(隔离级别); -
DataSource
的缺省
配置: defaultAutoCommit=true;
即: 如果
method
不配置@Transactional
,则每执行一个 SQL操作,如果成功,默认开启的事务
就会立即
向数据库自动commit
,而不能rollback
;
- 为了维护
数据库的完整性
,保证成批的 SQL 语句要么全部commit
,要么全部rollback
。通常包含以下两种
方式:- 用
BEGIN
,ROLLBACK
,COMMIT
来实现,显式地开启并控制一个Transaction
。 - 执行命令
SET AUTOCOMMIT=0
,用来禁止
当前会话自动commit
。
- 用
method
上配置注解@Transactional
,就是使用第一种
方式来实现Transaction管理
(基于SpringAOP
实现方法增强
,这里表现为TransactionAspectSupport
) 。