1. 事务的四个关键属性(ACID)
- 原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用.
- 一致性(consistency): 一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中.
- 隔离性(isolation): 可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来, 防止数据损坏.
- 持久性(durability): 一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中.
2. Spring 中的事务管理器的不同实现
3. Spring 的声明式事务管理
3.1 使用配置文件进行事务的声明式管理
<!-- 声明式事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="pooledDataSource" />
</bean>
<!-- 配置事物增强,如何控制 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 所有以add开头的方法都是事物方法 -->
<tx:method name="add*"
<!-- 事务传播行为 -->
propagation="REQUIRES_NEW"
<!-- 事务隔离级别-->
isolation="READ_COMMITED"
<!---事务回滚属性-->
rollback-for="java.lang.IOEXception,java.sql.SQLException"
no-rollback-for="java.lang.ArithmeticException"/>
<!-- 以get开始的所有方法 -->
<tx:method name="get*"
<!-- 只读事务属性-->
read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- aop切入点表达式 -->
<aop:pointcut expression="execution(* com.supreme.service..*(..))"
id="txPoint" />
<!-- 配置事务增强 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint" />
</aop:config>
3.2 使用@Transactional
注解声明式的管理事务
<!-- 声明式事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="pooledDataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
3.2.1 @Transactional
注解使用细节
3.2.2 @Transactional
注解使用示例
网友评论