zoukankan      html  css  js  c++  java
  • Spring事务管理TransactionManager

    事务就是对一系列的数据库操作进行统一的提交或回滚操作,比如说做一个转账功能,要更改帐户两边的数据,这时候就必须要用事务才能算是严谨的做法。要么成功,要么失败,保持数据一致性。如果中间有一个操作出现异常,那么回滚之前的所有操作。
    这样有什么好处呢。
    这样可以防止在一些意外(例如说突然断电)的情况下出现乱数据,防止数据库数据出现问题。这边加了钱,那边却还是一样的数,这就完了。要是开放一个网上交易的平台,这样就会出大问题的!
    还有其他的一些操作,像是要添加多条数据,如果程序要求必须全部正确才能插入的话,事务又起大作用了,等等。。。开发中为了避免这种情况一般都会进行事务管理。

    在JDBC中是通过Connection对象进行事务管理的,默认是自动提交事务,可以手工将自动提交关闭,通过commit方法进行提交,rollback方法进行回滚,如果不提交,则数据不会真正的插入到数据库中。

    Hibernate中是通过Transaction进行事务管理,处理方法与JDBC中类似。

    Spring中也有自己的事务管理机制,使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。

    系统设计方面要求手动控制事务

    1、
    applicationContext.xml:

    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
    p:dataSource-ref="dataSource"/>

    2、
    在需要加事务的方法上加上

    DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) ctx
    .getBean("transactionManager");
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务
    TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
    try {
    //逻辑代码
    transactionManager.commit(status);
    } catch (Exception e) {
    transactionManager.rollback(status);
    }

    引自:http://cailangwei.blog.163.com/blog/static/1314585792014895755400/

            https://zhidao.baidu.com/question/197227102.html

  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/WAbby/p/6118570.html
Copyright © 2011-2022 走看看