javatransaction注解,注解transactional

http://www.itjxue.com  2023-01-06 04:17  来源:未知  点击次数: 

为什么java里面要用@Transactional注解

打了这个注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务的原子性,不知道这样说你能不能理解,即是方法里面对数据库操作,如果失败则spring负责回滚操作,成功提交操作

Spring之Transactional注解

该注解的签名如下:

定义零(0)个或多个异常类,这些异常类必须是Throwable的子类,指示哪些异常类型必须导致事务回滚。

默认情况下,事务将在RuntimeException和Error上回滚,但不会在检查型异常(业务异常)上回滚。具体可以看DefaultTransactionAttribute.rollbackOn(Throwable)方法,有比较详细的解释。

这是构造回滚规则(与 rollbackForClassName比较)的首选方法,它匹配异常类及其子类。

定义零(0)个或多个异常名称(对于必须是Throwable子类的异常),指示哪些异常类型必须导致事务回滚。

这可以是完全限定类名的子字符串,目前不支持通配符。例如,“ServletException”的值将与ServletException及其子类匹配。

定义零(0)个或多个异常类,这些异常类必须是Throwable的子类,指示哪些异常类型不能导致事务回滚。

这是构造回滚规则(与noRollbackForClassName相比)的首选方法,它匹配异常类及其子类。

一个布尔标志,如果事务实际上是只读的,则可以将其设置为true,从而允许在运行时进行相应的优化。

默认为false。

这只是作为实际事务子系统的提示;它不一定会导致写入访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会引发异常,而是默默地忽略该提示。

此事务的超时时间(秒)。

默认为基础事务系统的默认超时。为Propagation.REQUIRED和Propagation.REQUIRES_NEW设计的参数,因为它只适用于新启动的事务。默认值为-1,表示不设置超时时间。

此事务的超时时间(秒)。

默认为基础事务系统的默认超时。

专门设计用于Propagation.REQUIRED和Propagation.REQUIRES_NEW,因为它只适用于新启动的事务。

事务隔离级别。

默认为Isolation.DEFAULT.

专门为Propagation.REQUIRED 和 Propagation.REQUIRES_NEW设计使用的,因为它只适用于新启动的事务。如果您希望隔离级别声明在参与具有不同隔离级别的现有事务时被拒绝,请考虑在事务管理器上切换“验证有效事务”标志为“true”。

事务传播类型。

默认为 Propagation.REQUIRED.

定义零(0)个或多个事务标签。标签可用于描述事务 ,并可由单个事务管理器进行评估。标签可能仅用于描述目的,或映射到预定义的事务管理器特定选项。

请参阅实际事务管理器实现的描述,了解它如何评估事务标签。

指定事务的限定符值。

可用于确定目标事务管理器,与特定TransactionManager bean定义的限定符值(或bean名称)匹配。

propagation的取值定义成了一个枚举类,如下所示:

REQUIRED

其值为0,支持当前事务,如果不存在,则创建新事务。类似于同名的EJB事务属性。这是事务注解的默认设置。

SUPPORTS

其值为1,支持当前事务,如果不存在,则以非事务方式执行。类似于同名的EJB事务属性。

注意:对于具有事务同步的事务管理器,SUPPORTS 与完全没有事务略有不同,因为它定义了同步将应用的事务范围。因此,相同的资源(JDBC连接、Hibernate会话等)将在整个指定范围内共享。请注意,这取决于事务管理器的实际同步配置。

MANDATORY

支持当前事务,如果不存在则抛出异常。类似于同名的EJB事务属性。

REQUIRES_NEW

创建新事务,并暂停当前事务(如果存在)。类似于同名的EJB事务属性。

注意:实际的事务暂停不会在所有交易管理器上立即生效。这尤其适用于JtaTransactionManager。JtaTransactionManager,它需要TransactionManager 可供其使用(在标准Java EE中是特定于服务器的)。

NOT_SUPPORTED

以非事务方式执行,如果当前事务存在,则暂停当前事务。类似于同名的EJB事务属性。

注意:实际的事务暂停不会在所有事务管理器上立即生效。这尤其适用于JtaTransactionManager。JtaTransactionManager,它需要TransactionManager可供其使用(在标准Java EE中是特定于服务器的)。

NEVER

以非事务方式执行,如果存在事务,则抛出异常。类似于同名的EJB事务属性。

NESTED

如果存在当前事务,则在嵌套事务中执行,否则按要求执行。EJB中没有类似的特性。

注意:嵌套事务的实际创建只适用于特定的事务管理器。开箱即用,这只适用于JDBC DataSourceTransactionManager。一些JTA提供者可能也支持嵌套事务。

枚举,用来表示Transactional 注解的事务隔离级别,与TransactionDefinition 接口定义的事务隔离级别相一致。

枚举定义如下:

DEFAULT

使用基础数据存储的默认隔离级别。所有其他级别都对应于JDBC隔离级别。

READ_UNCOMMITTED

一个常数,指示可能发生脏读、不可重复读和幻象读。此级别允许一个事务更改的行在提交该行的任何更改之前被另一个事务读取(“脏读”)。如果回滚了任何更改,则第二个事务将检索到无效行。

READ_COMMITTED

指示防止脏读的常数;可能会发生不可重复读取和幻象读取。此级别仅禁止事务读取包含未提交更改的行。

REPEATABLE_READ

指示防止脏读和不可重复读的常数;可能会发生幻象读取。该级别禁止事务读取包含未提交更改的行,还禁止一个事务读取一行,第二个事务更改该行,第一个事务重新读取该行,第二次获得不同的值(“不可重复读取”)。

SERIALIZABLE

一个常数,指示防止脏读、不可重复读和幻象读。该级别包括隔离可重复读取的禁止,并进一步禁止一个事务读取满足where条件的所有行,第二个事务插入满足where条件的行,第一个事务重新读取相同条件,在第二次读取中检索附加的“幻影”行。

Java 什么是注解及注解原理详细介绍

1、注解是针对Java编译器的说明。

可以给Java包、类型(类、接口、枚举)、构造器、方法、域、参数和局部变量进行注解。Java编译器可以根据指令来解释注解和放弃注解,或者将注解放到编译后的生成的class文件中,运行时可用。

2、注解和注解类型

注解类型是一种特殊的接口类型,注解是注解注解类型的一个实例。

注解类型也有名称和成员,注解中包含的信息采用键值对形式,可以有0个或多个。

3、Java中定义的一些注解:

@Override 告诉编译器这个方法要覆盖一个超类方法,防止程序员覆盖出错。

@Deprecated 这个标识方法或类(接口等类型)过期,警告用户不建议使用。

@SafeVarargs JDK7新增,避免可变参数在使用泛型化时候警告”执行时期无法具体确认参数类型“,当然,也可以用@SuppressWarnings来避免检查,显然后者的抑制的范围更大。

@SuppressWarnings(value={"unchecked"}) 抑制编译警告,应用于类型、构造器、方法、域、参数以及局部变量。 value是类型数组,有效取值为:

all, to suppress all warnings

boxing, to suppress warnings relative to boxing/unboxing operations

cast, to suppress warnings relative to cast operations

dep-ann, to suppress warnings relative to deprecated annotation

deprecation, to suppress warnings relative to deprecation

fallthrough, to suppress warnings relative to missing breaks in switch statements

finally, to suppress warnings relative to finally block that don't return

hiding, to suppress warnings relative to locals that hide variable

incomplete-switch, to suppress warnings relative to missing entries in a switch statement (enum case)

javadoc, to suppress warnings relative to javadoc warnings

nls, to suppress warnings relative to non-nls string literals

null, to suppress warnings relative to null analysis

rawtypes, to suppress warnings relative to usage of raw types

restriction, to suppress warnings relative to usage of discouraged or forbidden references

serial, to suppress warnings relative to missing serialVersionUID field for a serializable class

static-access, to suppress warnings relative to incorrect static access

static-method, to suppress warnings relative to methods that could be declared as static

super, to suppress warnings relative to overriding a method without super invocations

synthetic-access, to suppress warnings relative to unoptimized access from inner classes

unchecked, to suppress warnings relative to unchecked operations

unqualified-field-access, to suppress warnings relative to field access unqualified

unused, to suppress warnings relative to unused code and dead code

4、注解的定义

使用 @interface 关键字声明一个注解

public @interface MyAnnotation1

注解中可以定义属性

String name default “defval”;

value是注解中的特殊属性

注解中定义的属性如果名称为 value, 此属性在使用时可以省写属性名

例如,声明一个注解:

@Retention(RetentionPolicy.RUNTIME)

public @interface MyAnno1 {

String msg();

int value();

}

(责任编辑:IT教学网)

更多

相关数据库文章

推荐数据库文章