Spring 事务的隔离级别
ISOLATION_DEFAULT // 默认值,指底层数据库的默认隔离级别
ISOLATION_READ_UNCOMMITTED
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
Spring 事务的传播行为
PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 TransactionDefinition.PROPAGATION_REQUIRED。
Spring 事务超时
@Transational(timeout=x) // 单位是秒
Spring 只读事务
@Transational(read-only=true)
在这个事务里只能有数据库读操作,不能有写操作,否则会抛出异常,然后事务回滚。
true readonly 只读
false read/write 读写
Spring 事务回滚
如果在事务中抛出 RuntimeException,事务会回滚。
自动提交
数据库默认操作模式是 autocommit 自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。
spring 会将底层数据库连接的自动提交特性设置为 false。
当一个连接关闭时,如果有未提交的事务应该如何处理?JDBC 规范没有提及,C3P0 默认的策略是回滚任何未提交的事务。
Spring 编程式事务管理
TransactionTemplate
Spring 声明式事务管理
@Transactional(value="", read-only=true/false, timeout=x, isolation=xx.xx, propagation=xx.xx, ...)
@Transactional 可以作用于接口、接口方法、类以及类方法上。但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。
\<tx:annotation-driven transaction-manager="txManager" />
\<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 传入dataSource -->
\<property name="dataSource" ref="dataSource" />
\</bean>
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于