asuswang99 / wangzhenfei Goto Github PK
View Code? Open in Web Editor NEWstudy
study
可以从以下多个维度配置Spring事务。
propagation
表示当前事务与父事务(同一个线程中之前申明事务)的关系。父子事务体现为,方法调用栈的调用先后顺序。
说得更直白点,就是一个方法Method1调用另外一个申明Transaction的Method2,Method1可能申明Transaction,也可能没有,Method2如何处理Transaction的问题。
PROPAGATION_REQUIRED
如果父事务存在,使用父事务,没有则创建一个新的。Spring默认值。
例子:@transactional(propagation=Propagation.REQUIRED)
PROPAGATION_SUPPORTS
如果父事务存在,使用父事务,没有则就不使用事务。
例子:@transactional(propagation=Propagation.PROPAGATION_SUPPORTS)
PROPAGATION_MANDATORY
如果父事务存在,使用父事务,没有则抛出异常。
例子:@transactional(propagation=Propagation.PROPAGATION_MANDATORY)
PROPAGATION_REQUIRES_NEW
总是创建一个新的事务。如果父事务存在,父事务暂时挂起,没有则无需额外处理。
例子:@transactional(propagation=Propagation.PROPAGATION_REQUIRES_NEW)
PROPAGATION_NOT_SUPPORTED
无论父事务存在还是不存在,总是非事务处理,不用事务,父事务有的话暂时挂起。
例子:@transactional(propagation=Propagation.PROPAGATION_NOT_SUPPORTED)
PROPAGATION_NEVER
如果父事务存在,抛出异常,不存在则非事务处理。
例子:@transactional(propagation=Propagation.PROPAGATION_NEVER)
PROPAGATION_NESTED
与PROPAGATION_REQUIRED效果相同,使用范围暂时只支持JDBC3.0。
例子:@transactional(propagation=Propagation.PROPAGATION_NESTED)
isolation
刻画不同事务之间数据的可见性,数据的隔离级别。ISOLATION_READ_UNCOMMITTED,ISOLATION_READ_COMMITTED,ISOLATION_REPEATABLE_READ,ISOLATION_SERIALIZABLE隔离级别逐渐增强。基本与关系型
数据库的隔离级别一致。
ISOLATION_DEFAULT
具体的值依赖与底层数据源的隔离级别。Spring默认值。
例子:@transactional(isolation=Isolation.ISOLATION_DEFAULT)
ISOLATION_READ_UNCOMMITTED
可以看到别的事务未提交的数据。隔离级别很差。
例子:@transactional(isolation=Isolation.ISOLATION_READ_UNCOMMITTED)
ISOLATION_READ_COMMITTED
可以看到别的事务提交了的数据。避免脏读。
例子:@transactional(isolation=Isolation.ISOLATION_READ_COMMITTED)
ISOLATION_REPEATABLE_READ
避免脏读,也避免了non-repeatable read。
例子:@transactional(isolation=Isolation.ISOLATION_REPEATABLE_READ)
ISOLATION_SERIALIZABLE
避免脏读,也避免了non-repeatable read和phantom read。最强隔离级别。
例子:@transactional(isolation=Isolation.ISOLATION_SERIALIZABLE)
timeout
以秒为单位的事务超时时间。默认值-1,表示没有超时时间。
例子:@transactional(timeout=30)
readOnly
提示事务管理器,方法内部只涉及到读操作,Spring默认为false。依赖于底层事务管理器的解释,并不一定有效果。
例子:@transactional(readOnly=true)
rollbackFor
遇到什么样的异常事务会回滚。Spring默认值是RuntimeException,Checked Exception不会回滚。
例子:@transactional(rollbackFor=Exception.class)
结论
Spring的默认值基本能够满足一般事务需求。事务最佳实践是找到业务单元,在最顶层标注Transactional。
需要注意的有以下几点:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.