springmvc常用注解和spring事务的四大特性、事务的传播特性

springmvc常用注解和spring事务的四大特性、事务的传播特性

springmvc常用注解
@Controller:

用于定义控制器类
@ResponseBody:

表示方法的返回结果直接写入HTTP response body中
@PathVariable:

获取路径参数
@RequestParam:

用在方法的参数前面
@RequestBody

@RestController:

是@Controller和@ResponseBody的合集
@RequestMapping:

提供路由信息,负责URL到Controller中的具体函数的映射
@GetMapping:

是@RequestMapping(method = RequestMethod.GET)的缩写。不支持@RequestMapping的自定义属性。
@PostMapping:

是@RequestMapping(method = RequestMethod.POST)的缩写。不支持@RequestMapping的自定义属性。
@ControllerAdvice:统一处理异常。

spring事务的四大特性
原子性:
概念型理解:事务是不可分割的一部分,要么同时执行成功,要么集体回滚,比如一个方法中管理了多个方法,如果其中有一个执行失败,集体回滚。
业务型理解:我有一百块钱,给你转五十,转账过程中出现问题,不会扣除我的钱,你的钱也不会增加。
一致性:
概念型理解:是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
业务型理解:我有一百块钱,给你转五十,我还剩五十,咱们两个相加还是一百。
隔离性:
概念型理解:事务之间是相互隔离,互相不受打扰。
业务型理解:我给你转账的过程中,是不允许立马执行查询的,必须等待转账成功后,再执行查询的操作。
排它锁、行级锁、表级锁
持久性:
概念型理解:事务一旦提交,不再执行修改事务的情况下,它就是永久性的保存的。
业务型理解:服务器宕机了,电脑坏掉了,数据还有吗?一定是有的,因为它持久化了。

1、Propagation.REQUIRED

方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。

2、Propagation.REQUIRES_NEW

无论何时自身都会开启事务

3、Propagation.SUPPORTS

自身不会开启事务,在事务范围内则使用相同事务,否则不使用事务

4、Propagation.NOT_SUPPORTED

自身不会开启事务,在事务范围内使用挂起事务,运行完毕恢复事务

5、Propagation.MANDATORY

自身不开启事务,必须在事务环境使用否则报错

6、Propagation.NEVER

自身不会开启事务,在事务范围使用抛出异常

7、Propagation.NESTED

如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。需要JDBC3.0以上支持。

数据库的4大隔离级别
read uncommitted (读未提交)B事务可以读取到A事务未提交的修改。有脏读的问题
read committed (读以提交)B事务不能读取其他事务未commit的修改。有不可重复读,幻读的问题
repeated read (可重复读) 事务第一次读和第二次读,结果不受其他事务影响,结果是一样的。有幻读的问题
Serializeble (串行化)幻读,比如事务A对表T所有行进行update,再次查询,发现有些行没有update,原因是这些行是新增行,是其他事务添加的,导致不会修改新增的行。串行化,就是顺序执行事务。这个隔离界别要慎用,因为及其影响数据库吞吐量,未能使用到CPU的高性能。
隔离界别,从低到高。级别越高,数据库处理多事务的规则越严格,意味着要牺牲性能为代价。不同的数据库,默认的数据隔离级别有区别,大多数据库默认是repeated read。mysql默认是read committed。

spring的事务隔离级别,本质上是依照数据库来设计的。

spring的5大事务隔离级别
隔离级别 含义
ISOLATION_DEFAULT 使用后端数据库默认的隔离级别。
ISOLATION_READ_UNCOMMITTED 允许读取尚未提交的更改。可能导致脏读、幻影读或不可重复读。
ISOLATION_READ_COMMITTED 允许从已经提交的并发事务读取。可防止脏读,但幻影读和不可重复读仍可能会发生。
ISOLATION_REPEATABLE_READ 对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻影读仍可能发生。
ISOLATION_SERIALIZABLE 完全服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的
理解数据库隔离级别,自然就明白了设置spring各个事务的原因。

怎么理解事务传播特性?
这要从编程的角度。一个方法执行,在它之间,假如已经创建了事务,那它要创建新事务还是加入原有事务;假如之前没有事务,那它又该如何处理;假如外层事务异常要回滚,内层事务要不要回滚;假如内层事务异常要回滚,外层事务要不要回滚。这就要求必须定义好事务的传播特性,使得程序任一步都知道如何处理事务问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值