java中事物的注解_编程式事务、XML配置事务、注解实现事务

Spring2.0框架的事务处理有两大类:

1 编码式事务 , 这个不说.

2 声明式事务 , 就说这个.

声明式事务又有三种实现方法:

1 (第一种) 最早的方法,用TransactionProxyFactoryBean,他是一个有AOP代理功能的FactoryBean.他返回的对象有事务.

还要在spring的配置文件XML中配置,比较麻烦,不详细说.

pic.dao.transaction_test.TestPOAO

PROPAGATION_REQUIRED

2 (第二种) 使用来实现声明式事务 ,也要在spring的配置文件XML中配置,比较麻烦,不详细说.

.....

.....

3 (第三种) 这个方法方便,使用注解来实现声明式事务, 下面详细说说这个方法:

第一步:引入命名空间 ,在spring的配置文件中修改, beans根元素里多了三行,如下

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

第二步:在spring的配置文件中修改,将所有具有@Transactional 注解的bean自动配置为声明式事务支持

第三步: 在接口或类的声明处 ,写一个@Transactional. 要是只的接口上写, 接口的实现类就会继承下来.

接口的实现类的具体方法,还可以覆盖类声明处的设置.

@Transactional

public class TestPOAOImpl extends POAOBase implements TestPOAO

{

@Transactional(isolation = Isolation.READ_COMMITTED)

public void test1()

{

String sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解赵云',30)";

execute(sql);

sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解张飞',26)";

execute(sql);

int a = 9 / 0; //异常

sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解关羽',33)";

execute(sql);

System.out.println("走完了");

}

//execute() 方法略...

}

注意的几点:

1  @Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.

2 默认情况下,一个有事务方法, 遇到RuntiomeException 时会回滚 .  遇到 受检查的异常 是不会回滚 的. 要想所有异常都回滚,要加上 @Transactional( rollbackFor={Exception.class,其它异常}) .

@Transactional  的所有可选属性如下:

属性

类型

默认值

说明

propagation

Propagation枚举

REQUIRED

事务传播属性 (下有说明)

isolation

isolation枚举

DEFAULT

事务隔离级别 (另有说明)

readOnly

boolean

false

是否只读

timeout

int

-1

超时(秒)

rollbackFor

Class[]

{}

需要回滚的异常类

rollbackForClassName

String[]

{}

需要回滚的异常类名

noRollbackFor

Class[]

{}

不需要回滚的异常类

noRollbackForClassName

String[]

{}

不需要回滚的异常类名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值