Spring的事务管理

来源:互联网 发布:微博 知乎 编辑:程序博客网 时间:2024/06/10 22:30
Spring的事务管理功能都是基于底层数据库本身的处理机制工作的。
何为数据库事务?
        数据库事务满足:原子性、一致性、隔离性、持久性。一个数据库可以拥有多个访问客户端,这些客户端都可以并发的方式访问数据库。数据库中相同的数>据同时被多个事务访问。会导致各种并发问题:脏读、不可重复度、幻想读、第一类丢失更新、第二类丢失更新。
        数据库通过锁的机制来处理并发访问的问题:行共享锁定、行独占锁定、表共享锁定、表共享行独占、表独占。
        尽管数据库为用户提供了锁的机制,但是直接使用锁管理是十分麻烦的,因此数据库为用户提供了自动锁机制。只要用户指定会话的事务隔离级别:READ UNCOMMIT、READ COMMITED、REPEATABLE READ、SERIALIZABLE
        JDBC对事务的支持:事务最终只能由=有两个操作:提交和回滚操作。

ThreadLocal基础知识:
        TreadLocal是为了解决多线程程序的并发问题:当工作于多线程中的对象使用TreadLocal维护变量时,TreadLocal为每个使用该变量的线程分配一个独立的>副本,而不影响其他线程对应的副本。是一种以空间换时间的方式。
        TraedLocal是如何做到为每个吸纳过程维护变量的副本的?
                在TreadLocal类中有一个Map,用于存储每一个线程的副本,Map中的键为线程对象,而值为线程的变量副本。
                public class SimpleTreadLocal{                        private Map valueMap=Collections.synchroniedMap(new HashMap());                        public void set(Object newvalue){                                valueMap.put(currentTread(),newValue);                        }                        public Object get(){                                Tread currentTread=Tread.currentTread();                                Object o=valueMap.get(currentTread);                                if(o==null && !valueMap.containsKey(currentTread)){                                        o=initialValue();                                        valueMap.put(currentTread,o);                                }                                return o;                        }                        public void remove(){                                valueMap.remove(Tread.currentTread());                        }                        public Object initialValue(){                                return null;                        }                }
Spring对事务管理的支持
        Spring为事务管理提供了一致的编程模板,在高层次建立了统一的事务抽象。spring事务管理的亮点在于声明式事务管理。spring允许通过声明的方式,在IOC配置中指定事务的边界和事务的属性,Spring自动在事务的边界上应用事务的属性。
        事务管理关键抽象:
                在spring事务管理SPI高层抽象主要包括3个接口:PlatformTransactionManager、TransactionDefinition和TransactionStatus。其中TransactionManager定义了Spring兼容的事务属性,这些属性对事务管理控制的若干方面进行配置:事务隔离、事务传播、事务超时、制度状态。TransactionStatus,代表uogeshiwu的具体运行状态

Spring的实现类:
        Spring JDBC 和iBatis:
                如果使用Spring JDBC或者IBatis,他们都是基于数据源的Connection访问数据库,所以可以使用DataSourceTransactionManager。
        JPA
        Hibernate
        JTA

事务同步管理器:
        TransactionSynchronizationManager将Dao、Service类中影响线程安全的所有状态统一抽取到该类中,并用TreadLocal进行替换,从此Dao和Service摘掉了
非线程安全的帽子。


使用XML配置声明式事务:
        一用就更容易理解。。。


0 0
原创粉丝点击