spring事务传播属性,隔离级别
2017-09-21 11:59
477 查看
package org.springframework.transaction; import java.sql.Connection; /** * Interface that defines Spring-compliant transaction properties. * Based on the propagation behavior definitions analogous to EJB CMT attributes. * * <p>Note that isolation level and timeout settings will not get applied unless * an actual new transaction gets started. As only {@link #PROPAGATION_REQUIRED}, * {@link #PROPAGATION_REQUIRES_NEW} and {@link #PROPAGATION_NESTED} can cause * that, it usually doesn't make sense to specify those settings in other cases. * Furthermore, be aware that not all transaction managers will support those * advanced features and thus might throw corresponding exceptions when given * non-default values. * * <p>The {@link #isReadOnly() read-only flag} applies to any transaction context, * whether backed by an actual resource transaction or operating non-transactionally * at the resource level. In the latter case, the flag will only apply to managed * resources within the application, such as a Hibernate <code>Session</code>. * * @author Juergen Hoeller * @since 08.05.2003 * @see PlatformTransactionManager#getTransaction(TransactionDefinition) * @see org.springframework.transaction.support.DefaultTransactionDefinition * @see org.springframework.transaction.interceptor.TransactionAttribute */ public interface TransactionDefinition { //事务的传播属性 /** * Support a current transaction; create a new one if none exists. * 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。 REQUIRED(必需的) */ int PROPAGATION_REQUIRED = 0; /** * Support a current transaction; execute non-transactionally if none exists. * 支持当前事务,如果当前没有事务,就以非事务方式执行 */ int PROPAGATION_SUPPORTS = 1; /** * Support a current transaction; throw an exception if no current transaction * exists. * 支持当前事务,如果当前没有事务,就抛出异常 MANDATORY(强制的) */ int PROPAGATION_MANDATORY = 2; /** * Create a new transaction, suspending the current transaction if one exists. * 新建事务,如果当前存在事务,把当前事务挂起 * 一旦内层事务进行了提交后,外层事务不能对其进行回滚 * 两个事务互不影响 */ int PROPAGATION_REQUIRES_NEW = 3; /** * Do not support a current transaction; rather always execute non-transactionally. * 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起 */ int PROPAGATION_NOT_SUPPORTED = 4; /** * Do not support a current transaction; throw an exception if a current transaction * exists. * 以非事务方式执行,如果当前存在事务,则抛出异常。 */ int PROPAGATION_NEVER = 5; /** * Execute within a nested transaction if a current transaction exists, * 支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。 * 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。 * 外层事务失败时,会回滚内层事务所做的动作,而内层事务操作失败并不会引起外层事务的回滚。 */ int PROPAGATION_NESTED = 6; //事务的隔离级别 /** * 使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应 */ int ISOLATION_DEFAULT = -1; /** * 读未提交 (脏读)这是事务最低的隔离级别, 它允许另外一个事务可以看到这个事务未提交的数据。 这种隔离级别会产生脏读,不可重复读和幻像读。 */ int ISOLATION_READ_UNCOMMITTED = Connection.TRANSACTION_READ_UNCOMMITTED; /** *保证一个事务修改的数据提交后才能被另外一个事务读取。 另外一个事务不能读取该事务未提交的数据。 这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。 */ int ISOLATION_READ_COMMITTED = Connection.TRANSACTION_READ_COMMITTED; /** 这种事务隔离级别可以防止脏读,不可重复读。 但是可能出现幻像读。 它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读 */ int ISOLATION_REPEATABLE_READ = Connection.TRANSACTION_REPEATABLE_READ; /** 这是花费最高代价但是最可靠的事务隔离级别。 事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。 */ int ISOLATION_SERIALIZABLE = Connection.TRANSACTION_SERIALIZABLE; /** * Use the default timeout of the underlying transaction system, * or none if timeouts are not supported. */ int TIMEOUT_DEFAULT = -1; /** * Return the propagation behavior. * <p>Must return one of the <code>PROPAGATION_XXX</code> constants * defined on {@link TransactionDefinition this interface}. * @return the propagation behavior * @see #PROPAGATION_REQUIRED * @see org.springframework.transaction.support.TransactionSynchronizationManager#isActualTransactionActive() */ int getPropagationBehavior(); /** * Return the isolation level. * <p>Must return one of the <code>ISOLATION_XXX</code> constants * defined on {@link TransactionDefinition this interface}. * <p>Only makes sense in combination with {@link #PROPAGATION_REQUIRED} * or {@link #PROPAGATION_REQUIRES_NEW}. * <p>Note that a transaction manager that does not support custom isolation levels * will throw an exception when given any other level than {@link #ISOLATION_DEFAULT}. * @return the isolation level */ int getIsolationLevel(); /** * Return the transaction timeout. * <p>Must return a number of seconds, or {@link #TIMEOUT_DEFAULT}. * <p>Only makes sense in combination with {@link #PROPAGATION_REQUIRED} * or {@link #PROPAGATION_REQUIRES_NEW}. * <p>Note that a transaction manager that does not support timeouts will throw * an exception when given any other timeout than {@link #TIMEOUT_DEFAULT}. * @return the transaction timeout */ int getTimeout(); /** * Return whether to optimize as a read-only transaction. * <p>The read-only flag applies to any transaction context, whether * backed by an actual resource transaction * ({@link #PROPAGATION_REQUIRED}/{@link #PROPAGATION_REQUIRES_NEW}) or * operating non-transactionally at the resource level * ({@link #PROPAGATION_SUPPORTS}). In the latter case, the flag will * only apply to managed resources within the application, such as a * Hibernate <code>Session</code>. << * <p>This just serves as a hint for the actual transaction subsystem; * it will <i>not necessarily</i> cause failure of write access attempts. * A transaction manager which cannot interpret the read-only hint will * <i>not</i> throw an exception when asked for a read-only transaction. * @return <code>true</code> if the transaction is to be optimized as read-only * @see org.springframework.transaction.support.TransactionSynchronization#beforeCommit(boolean) * @see org.springframework.transaction.support.TransactionSynchronizationManager#isCurrentTransactionReadOnly() */ boolean isReadOnly(); /** * Return the name of this transaction. Can be <code>null</code>. * <p>This will be used as the transaction name to be shown in a * transaction monitor, if applicable (for example, WebLogic's). * <p>In case of Spring's declarative transactions, the exposed name will be * the <code>fully-qualified class name + "." + method name</code> (by default). * @return the name of this transaction * @see org.springframework.transaction.interceptor.TransactionAspectSupport * @see org.springframework.transaction.support.TransactionSynchronizationManager#getCurrentTransactionName() */ String getName(); }
相关文章推荐
- spring事务传播属性和隔离级别
- spring事务的七种传播属性行为及五种隔离级别
- spring事务传播属性和隔离级别
- Spring的事务传播属性,数据库的隔离级别
- spring事务传播属性与隔离级别
- Spring事务传播属性和隔离级别
- spring 事务的隔离级别和传播属性
- spring事务传播属性和隔离级别
- Spring的事务传播属性,数据库的隔离级别
- spring事务传播属性和隔离级别
- Spring事务传播属性和隔离级别详细介绍
- spring的事务传播属性与数据库的隔离级别
- Spring的事务传播属性,数据库的隔离级别
- spring的事务传播属性和隔离级别
- spring事务传播属性与隔离级别
- spring事务传播属性和隔离级别
- spring事务传播属性与隔离级别
- spring事务的隔离级别和传播属性
- spring事务传播属性和隔离级别
- spring事务传播属性和隔离级别