Spring 事务-04-隔离和传播-4-TransactionTemplate

一笑奈何 提交于 2020-02-27 03:01:43

1、用途

Spring的公共事务属性实现。默认情况下回滚运行时异常,但未被检查。

2、类图

3、类分析

import org.springframework.lang.Nullable;
import org.springframework.transaction.interceptor.TransactionAttribute;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.util.StringUtils;

/**
 * Spring的公共事务属性实现。
 * 默认情况下回滚运行时异常,但未被检查。
 */
@SuppressWarnings("serial")
public class DefaultTransactionAttribute extends DefaultTransactionDefinition implements TransactionAttribute {

	@Nullable
	private String qualifier;

	@Nullable
	private String descriptor;


	/**
	 * 使用默认设置创建一个新的DefaultTransactionAttribute。
	 * 可以通过bean属性设置器进行修改。
	 * @see #setPropagationBehavior
	 * @see #setIsolationLevel
	 * @see #setTimeout
	 * @see #setReadOnly
	 * @see #setName
	 */
	public DefaultTransactionAttribute() {
		super();
	}

	/**
	 * 拷贝构造函数。可以通过bean属性设置器修改定义。
	 * @see #setPropagationBehavior
	 * @see #setIsolationLevel
	 * @see #setTimeout
	 * @see #setReadOnly
	 * @see #setName
	 */
	public DefaultTransactionAttribute(TransactionAttribute other) {
		super(other);
	}

	/**
	 * 使用给定的传播行为创建一个新的DefaultTransactionAttribute。
	 * 可以通过bean属性设置器进行修改。
	 * @param propagationBehavior one of the propagation constants in the
	 * TransactionDefinition interface
	 * @see #setIsolationLevel
	 * @see #setTimeout
	 * @see #setReadOnly
	 */
	public DefaultTransactionAttribute(int propagationBehavior) {
		super(propagationBehavior);
	}


	/**
	 * 将限定符值与此事务属性关联。
	 * 这可以用于选择相应的事务管理器来处理此特定事务。
	 * @since 3.0
	 */
	public void setQualifier(@Nullable String qualifier) {
		this.qualifier = qualifier;
	}

	/**
	 * 返回与此事务属性关联的限定符值。
	 * @since 3.0
	 */
	@Override
	@Nullable
	public String getQualifier() {
		return this.qualifier;
	}

	/**
	 * 设置此事务属性的描述符,
	 * 例如,指示属性应用于何处。
	 * @since 4.3.4
	 */
	public void setDescriptor(@Nullable String descriptor) {
		this.descriptor = descriptor;
	}

	/**
	 * 返回此事务属性的描述符,如果没有,则返回{@code null}。
	 * @since 4.3.4
	 */
	@Nullable
	public String getDescriptor() {
		return this.descriptor;
	}

	/**
	 * 默认行为与EJB一样:回滚未检查的异常({@link RuntimeException}),
	 * 假设出现任何业务规则之外的意外结果。
	 * 此外,我们还尝试回滚{@link Error},这显然也是一个意外结果。
	 * 相反,检查异常被认为是业务异常,因此是事务性业务方法的常规预期结果,即一种可选的返回值,它仍然允许常规完成资源操作。
	 * 这与TransactionTemplate的默认行为基本一致,
	 * 除了TransactionTemplate还回滚未声明的已检查异常(一种极端情况)。
	 * 对于声明性事务,我们希望将受控异常有意声明为业务异常,从而在缺省情况下导致提交。
	 * @see org.springframework.transaction.support.TransactionTemplate#execute
	 */
	@Override
	public boolean rollbackOn(Throwable ex) {
		return (ex instanceof RuntimeException || ex instanceof Error);
	}


	/**
	 * 返回此事务属性的标识说明。
	 * 可用于子类,以包含在它们的{@code toString()}结果中。
	 */
	protected final StringBuilder getAttributeDescription() {
		StringBuilder result = getDefinitionDescription();
		if (StringUtils.hasText(this.qualifier)) {
			result.append("; '").append(this.qualifier).append("'");
		}
		return result;
	}

}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!