编程式事务spring
声明式事务数据库
transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { try{ } catch (Exception e) { } finally { status.setRollbackOnly(); ) );
xml配置编程
<!-- 事务管理配置 --> <bean id="springTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven proxy-target-class="true" transaction-manager="springTransactionManager"/>
添加【@Transaction】注解到相关方法服务器
属性名 | 说明 |
---|---|
name | 当在配置文件中有多个 TransactionManager , 能够用该属性指定选择哪一个事务管理器。 |
propagation | 事务的传播行为,默认值为 REQUIRED。 |
isolation | 事务的隔离度,默认值采用 DEFAULT。 |
timeout | 事务的超时时间,默认值为-1。若是超过该时间限制但事务尚未完成,则自动回滚事务。 |
read-only | 指定事务是否为只读事务,默认值为 false;为了忽略那些不须要事务的方法,好比读取数据,能够设置 read-only 为 true。 |
rollback-for | 用于指定可以触发事务回滚的异常类型,若是有多个异常类型须要指定,各种型之间能够经过逗号分隔。 |
no-rollback- for | 抛出 no-rollback-for 指定的异常类型,不回滚事务。 |
PROPAGATION_REQUIRED并发
PROPAGATION_SUPPORTS框架
PROPAGATION_MANDATORY性能
PROPAGATION_REQUIRES_NEW编码
PROPAGATION_NOT_SUPPORTED.net
PROPAGATION_NEVERcode
DEFAULT
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE_READ
SERIALIZABLE
正确的设置@Transactional 的 rollbackFor 属性
@Transactional 只能应用到 public 方法才有效
避免 Spring 的 AOP 的自调用问题
@Service public class OrderService { private void insert() { insertOrder(); } @Transactional public void insertOrder() { //insert log info //insertOrder //updateAccount } }
JDBC事务
JTA事务