# spring-03-dt **Repository Path**: stevenye/spring-03-dt ## Basic Information - **Project Name**: spring-03-dt - **Description**: spring 框架申明式事务的案例 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2017-01-11 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring DT Demo ## DT, Declarative Transaction 申明式事务介绍 ### 事务特性 * 原子性(Atomic) 事务不可以再分,要么一起成功,要么一起失败 * 一致性(Consistency) 在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏 * 隔离性(Isolation) 并发的事务是相互隔离的,互不干扰 * 持久性(Durable) 事务一旦提交成功,数据将被持久化 ### 事务划分 1. 本地事务(Local), 只连接一个数据库 ![图标](images/tm1.png) 2. 全局事务, 可以跨越多个数据库 ![图标](images/tm2.png) ### 事务分类 * 编程式事务 通过Coding来控制事务的开启、提交、回滚 * 申明式事务 通过配置(**推荐**) 申明式事务主要由以下部份组成: ![图示](images/申明式事务1.png) ### 设定事务的传播行为 传播行为有以下7种: ![传播行为](images/事务传播图.png) 参照表: ![事务参照表](images/传播表.png) ### 事务隔离级别: 1. READ_UNCOMMITTED > 允许脏读 2. READ_COMMITTED > 可以防止脏读 3. REPEATABLE_READ > 可以防止重复读 4. SERIALIZABLE > 可以防止幻读 ## 事务管理器依赖树 在Spring框架中,事务依赖于SessionFactory, 而SessionFactory又依赖于DataSource, DataSource取决于底层的DataBase的配置以及连接池的实现,如: ![在Spring中的依赖关系图](images/依赖树.png) ## 相关的注解 * @Configuration //配置类注解 * @ComponentScan({"com.tz.dao","com.tz.service"}) //要扫描的包 * @PropertySource("classpath:db.properties") //要读取的属性文件 * @EnableAspectJAutoProxy //启动AOP * @EnableTransactionManagement //启动基于注解的 声明式事务 * @Bean //申明为被Spring DI容器管理的bean * @Autowire //自动注入 * @Transactional //申明式事务 ## 开发步骤 1. 建立项目 2. pom.xml中配置 Spring DT相关的依赖,包含 spring-context,spring-orm,spring-aop,spring-aspects 等 3. 写配置类 AppConfig 4. 并把TM依赖树中的DataSource, SessionFactory, TransactionManager 编写在配置类中 5. 在需要使用申明式事务的类或方法上添加@Transactional注解 6. 编写单元测试 在此项目中,pom.xml中的依赖图如下: ![依赖关系图](images/pom依赖关系1.png) ## 其它 详情请参考代码的实现 [点击此处](http://git.oschina.net/stevenye/spring-03-dt/blob/master/src/main/java/com/tz/config/AppConfig.java?dir=0&filepath=src%2Fmain%2Fjava%2Fcom%2Ftz%2Fconfig%2FAppConfig.java&oid=1f4d6fb271d21118f4519a0d99657c302bbde8d8&sha=cdfcb7ff31af00554b42cdd10a40532915c05dcb)