spring事务管理

Spring事务控制

我怕爱的太早我们不能终老 提交于 2020-01-24 21:12:14
事务控制 spring中基于XML的声明式 配置事务管理器 配置事务的通知 tx:method isolation:用于指定事务的隔离级别,默认为DEFAULT,表示使用数据库的默认隔离级别。 propagation:用于指定事务的传播行为,默认值为REQUIRED,表示是一定会有事务,增删改查的选择。查询方法可以选择SUPPORTS read-only:用于指定事务是否只读,只有查询方法才能设置为true。默认值为false,表示读写 rollback-for:用于指定一个异常,当发生该异常时,事务回滚,产生其他异常时事务不回滚。没有默认值,表示任何异常都回滚 no-rollback-for:用于指定一个异常,事务不回滚,产生其他异常时事务回滚,没有默认值,表示任何异常都回滚 timeout:用于指定事务的超时时间,默认值为-1,表示永不超时。如果指定了该值,以秒为单位。 使用tx:advice标签配置事务通知 id:唯一标识 transaction-manager:事务管理器引用 配置aop通用切入点表达式 建立事务通知和切入点表达式的对应关系 示例 <!--配置连接池--> < bean id = " dataSource " class = " org.springframework.jdbc.datasource.DriverManagerDataSource " > <

Spring 事务归纳

雨燕双飞 提交于 2020-01-23 22:30:39
Spring transaction 什么是事务 A用户向B用户转帐100,第一步要从A帐户扣出100,第二步要将B帐户加上100。其中无论是第一步失败,还是第二步失败。都应该将A、B帐户的余额保持和转帐操作之前一致。 事务就是一系列相关联操作的集合,一个事务可以是多个步骤组成,如果一个步骤失败,那么整个流程都应该回滚到初始状态。 事务的四个特性 原子性(Atomicity) 一个事务是一个整体,无论有多少个步骤组成,要么所有步骤都成功,要么所有步骤都失败。 一致性(Consistency) 一个事务完成(无论是成功还是失败),所有的业务都应该处于一致的状态,不应该部分步骤成功,部分步骤失败,显示中的数据一致性不会被破坏。 隔离性(Isolation) 多个事务处理相同的数据的时候,事务间应该是相互隔离的,防止数据损坏。 持久性(Durability) 一旦事务完成,无论系统发生什么异常,结果都不应该受到影响,通常事务的结果被写入到数据库中。 Spring处理事务的核心接口 Spring涉及到事务管理的核心接口相互关系如下 Spring并没有直接提供事务管理的实现,而是提供了一个接口PlatformTransactionManager。具体的实现依赖项目中所使用的持久化接口。 PlatformTransactionManager 定义了所有的具体实现类必须要有的方法

清晰架构(Clean Architecture)的Go微服务: 事物管理

我只是一个虾纸丫 提交于 2020-01-23 16:47:33
为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个。 事务很容易在Go中实现,但很难做到正确地实现。 需求: 石头文学网 https://www.10tou.com 将业务逻辑与事务代码分开。 在编写业务用例时,开发者应该只需考虑业务逻辑,不需要同时考虑怎样给业务逻辑加事务管理。如果以后需要添加事务支持,你可以在现有业务逻辑的基础上进行简单封装,而无需更改任何其他代码。事务实现细节应该对业务逻辑透明。 事务逻辑应该作用于用例层(业务逻辑) 不在持久层上。 数据服务(数据持久性)层应对事务逻辑透明。 这意味着持久性代码应该是相同的,无论它是否支持事务 你可以选择延迟支持事物。 你可以先编写没有事务的用例,稍后可以在不修改现有代码的情况下给该用例加上事务。你只需添加新代码。 我最终的解决方案还不是声明式事务管理,但它非常接近。创建一个真正的声明式事务管理需要付出很多努力,因此我构建了一个可以实现声明式事务的大多数功能的事务管理,同时又没花很多精力。 方案: 最终解决方案涉及本程序的所有层级,我将逐一解释它们。 数据库链接封装 在Go的“sql”lib中,有两个数据库链接sql.DB和sql.Tx. 不需要事务时,使用sql.DB访问数据库; 当需要事务时,你使用sql.Tx. 为了共享代码,持久层需要同时支持两者。

Spring事务的传播机制

寵の児 提交于 2020-01-23 03:02:14
说起事务,就不得不谈谈事务的四大特性: 事务是一系列的操作,由一条或多条sql语句组成。是不可分割的整体,是最小的操作单位。 事务的特性:ACID 原子性(Atomicity): 最小的执行单元。(要么全成功,有一条失败则回滚到最初状态) 一致性(Consistency): 事务完成时所用的数据从一种一致性状态变为另一种一致性状态,所用的变更必须是在事务中进行修改,确保数据的完整性。 隔离性(Isolation): 一个事务中的操作不能受其它事务的影响,多事务对数据的操作相互隔离,一个事务不能看到另一个事务 正在修改的数据。 持久性(Durability): 事务执行完毕后,对数据的修改应持久保存在磁盘中。 当我们调用一个基于Spring的service层的方法时,它将运行于spring管理的事务当中,spring通过事务的传播行为控制当前事务如何传播到被嵌套调用的目标服务接口方法中。事务传播是spring进行事务管理的重要概念,本文进行分析不同事务传播行为的表现形式。 事务的传播行为类型(7种):传播行为即在两个业务之间如何共享事务 PROPAGATION_REQUIRED required , 必须 【默认值】 支持当前事务,A如果有事务,B将使用该事务。 如果A没有事务,B将创建一个新的事务。 PROPAGATION_SUPPORTS supports ,支持 支持当前事务

清晰架构(Clean Architecture)的Go微服务: 事物管理

亡梦爱人 提交于 2020-01-22 10:29:21
为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个。 事务很容易在Go中实现,但很难做到正确地实现。 需求: 将业务逻辑与事务代码分开。 在编写业务用例时,开发者应该只需考虑业务逻辑,不需要同时考虑怎样给业务逻辑加事务管理。如果以后需要添加事务支持,你可以在现有业务逻辑的基础上进行简单封装,而无需更改任何其他代码。事务实现细节应该对业务逻辑透明。 事务逻辑应该作用于用例层(业务逻辑) 不在持久层上。 数据服务(数据持久性)层应对事务逻辑透明。 这意味着持久性代码应该是相同的,无论它是否支持事务 你可以选择延迟支持事物。 你可以先编写没有事务的用例,稍后可以在不修改现有代码的情况下给该用例加上事务。你只需添加新代码。 我最终的解决方案还不是声明式事务管理,但它非常接近。创建一个真正的声明式事务管理需要付出很多努力,因此我构建了一个可以实现声明式事务的大多数功能的事务管理,同时又没花很多精力。 方案: 最终解决方案涉及本程序的所有层级,我将逐一解释它们。 数据库链接封装 在Go的“sql”lib中,有两个数据库链接sql.DB和sql.Tx. 不需要事务时,使用sql.DB访问数据库; 当需要事务时,你使用sql.Tx. 为了共享代码,持久层需要同时支持两者。 因此需要对数据库链接进行封装,然后把它作为数据库访问方法的接收器。

Spring常见面试题总结(超详细回答)

走远了吗. 提交于 2020-01-22 09:10:26
1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系

编程式事务和声明式事务

只愿长相守 提交于 2020-01-21 15:12:42
编程式事务 :所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声明式事务 :管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。 显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。 声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。 来源: https://www.cnblogs.com/coder-wf/p/12221677.html

Spring事务的基本原理、传播属性、隔离级别

喜夏-厌秋 提交于 2020-01-19 17:45:28
一、事务的基本要素(ACID) 事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功。其必须遵循四个原则(ACID)。 原子性(Atomicity):指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成。 一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是应该处于正确的状态,即数据完整性约束没有被破坏;如银行转帐,A转帐给B,必须保证A的钱一定转给B,一定不会出现A的钱转了但B没收到,否则数据库的数据就处于不一致(不正确)的状态。 隔离性(Isolation):并发事务执行之间互不影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性; 持久性(Durability):事务一旦执行成功,它对数据库的数据的改变必须是永久的,不会因比如遇到系统故障或断电造成数据不一致或丢失。 二、数据库隔离级别 隔离级别 隔离级别的值 脏读 不可重复读 幻读 读未提交 Read-Uncommitted 0 是 是 是 不可重复读 (read-committed) 1 否 是 否 可重复读 (repeatable-read) 2 否 否

第二周spring内容

≯℡__Kan透↙ 提交于 2020-01-19 04:42:32
spring通过ioc创建bean的三种方式 一、使用自动装配创建bean Spring主要从两个角度来实现自动化装配:①组件扫描;②自动装配。组件扫描指的是Spring会自动扫描指定包及其子包下的所有bean,并将其放入spring容器中进行管理,而自动装配则是指对于有相互依赖关系的bean,Spring会将其自动装配到目标bean中,如将repository层的bean自动装配到service层中。 自动装配的方式创建bean主要是使用一个被专门用来当做配置的接口(或类)来实现的。配置接口上主要使用两个注解:@Configuration和@ComponentScan。@Configuration来标注该接口是用于定义配置的,而@ComponentScan则是用于指定扫描的bean的文件夹的,默认情况下Spring会扫描该配置接口所在包及其子包下的所有bean。 这样Spring就可以自动创建一个SgtPeppers的实例,并且将其放到Spring容器中进行管理,另外我们也可以使用@Named注解来创建一个bean。 上面只是讲了如何创建一个bean,而自动装配还有另一方面的概念:依赖注入。其是指Spring会将一个bean所依赖的bean自动装配进来。依赖注入是通过@Autowired或@Resource来实现的,当一个bean需要另一个bean作为其属性的时候

spring第四章-AOP

三世轮回 提交于 2020-01-18 04:32:28
文章目录 spring第四章-AOP 一、目标 二、jdbcTemplate的使用 1、jdbcTemplate的介绍 2、数据源配置 3、jdbcTemplate的CRUD 4、在dao中使用jdbcTemplate方法一 5、在dao中使用jdbcTemplate方法二 三、spring的事务控制 1、spring事务控制的api介绍--事务管理类 2、事务的特性 3、事务的传播 4、是否为只读的事务 5、基于xml声明式事务管理(配置文件)(重点)(推荐) 6、基于注解的配置(重点) spring第四章-AOP 一、目标 1、jdbcTemplate的使用 2、spring的事务控制 3、了解spring5的新特性 二、jdbcTemplate的使用 1、jdbcTemplate的介绍 jdbc --- dbutils -- jdbcTemplate(spring 提供) -- mybatis(主流) -- spring data jpa(趋势) 2、数据源配置 a. c3p0数据源 <!--c3p0数据源--> < dependency > < groupId > c3p0 </ groupId > < artifactId > c3p0 </ artifactId > < version > 0.9.1.2 </ version > </ dependency > <!-