java的事务处理,java事务处理

什么是事务呢?事务有哪些特性呢? (ACID)

百科:http://baike.baidu.com/view/1298364.htm

java的事务模型有三种:

1.本地事务模型

2.编程事务模型

3.声明事务模型

本地事务模型,我个人理解是 依赖JDBC 的Connection 事务设置的 ,我们一般写代码

Connection con =  null;

con.setAutoCommit(false);

Statement statement = con.createStatement();

String sql = "update ....";

try{

statement.execute(sql);

con.commit();

}catch(Exception e){

con.rollback();

throw e;

}finally{

关闭连接

}

主要是把Connection的自动提交事务的设置成false,让程序员代码方式来管理事务的 提交,这样很大的 依赖程序员的编码,以及后续对Connection 关闭的处理, 如果程序员忘记关闭连接,那就会造成内存泄露, 后果很严重的, 老大可是会很生气的,

编程事务模型和本地事务最大的区别是开发人员直接面对事务(transation),而不是Connection。在编程事务模型中,开发人员主要复杂开启事务和终止事务。虽然比本地事务对开发更友好了, 还是不推荐使用编程事务模型,(纯属吐槽: 可是我在的项目中,它恰恰也是用得这种事务模型, 说是用MYSQL 数据库对事务处理不好, 一个后台系统, 根本就没那么高的并发, 还把代码逻辑弄得一塌糊涂,事务都是用内部类来实现的,

声明事务模型完全由容器控制,这就意为作开发人员不用写任何事务代码。这种事务模型是比较推荐的 ,也是现在主流的架构师所推荐的。spring,ejb 都很好的支持这种事务模型, 只要在配置文件里配置一下, 对业务代码完全没什么污染

事务属性主要有六种,

Required 需要,如果上下文有个事务存在,则用这个,没有事务,则开启个新的事务(最常用的 )

Mandatory 强制必须,事先开启事务, 如果不存在,则抛出TransactionRequiredException异常

RequiresNew需要新的,每次都需要新的事务来支持, 如果事务已经开启了,此事务将被暂时挂起,容器启动一个新的事务。当这个新事务随着方法调用完成终止后,老的事务将会继续。

supports支持  并不需要特定的事务支持, 有就用, 没有就不用

NotSupported不支持  如果一个事务业已启动,容器会将此事务暂停直至方法调用结束。如果调用方法时没有事务存在,容器也不会为此方法开启任何事务

Never不用 不允许有事务存在

事务隔离级别

TransactionReadUncommitted 读取未提交

TransactionReadCommitted 读取已提交

TransactionRepeatableRead 可重复读

TransactionSerializable 可序列化

spring   @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)

主要针对接口方法级别事务控制, 必须要抛出异常,  @Transactional 也是基于AOP,字节码增强技术来实现的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值