天天看点

SpringBoot 学习笔记三:RESTful和Transactional注解

一、RESTful API简述

  1. 所有的东西都是资源,所有的操作都是对资源的增删改查(CRUD)。
  2. 对资源的增加、删除、修改、查询对应着POST、DELETE、POT、GET。
  3. 无状态(针对状态的web开发而言)
    1. 在基于状态的Web服务中,Client与Server交互的信息(如:用户登录状态)会保存在Server的Session中。再这样的前提下,Client中的用户请求只能被保存有此用户相关状态信息的服务器所接受和理解。
    2. 在无状态的Web服务中,每一个Web请求都必须是独立的,请求之间是完全分离的。Server没有保存Client的状态信息,所以Client发送的请求必须包含有能够让服务器理解请求的全部信息,包括自己的状态信息。使得一个Client的Web请求能够被任何可用的Server应答,从而将Web系统扩展到大量的Client中

二、@Transactional 注解

  1. 属性
    1. name :当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
    2. progatation : 事务的传播行为,默认值REQUIRED。
      1. 事务传播行为类型 说明
        PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
        PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
        PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
        PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
        PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
        PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
        PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
    3. isolation :事务的隔离度。
      1. 隔离级别
        isolation_default 使用数据库默认的事务隔离级别
        isolation_read_uncommitted 允许读取尚未提交的修改,可能导致脏读、幻读和不可重复读
        isolation_read_committed  允许从已经提交的事务读取,可防止脏读、但幻读,不可重复读仍然有可能发生
        isolation_repeatable_read 对相同字段的多次读取的结果是一致的,除非数据被当前事务自生修改。可防止脏读和不可重复读,但幻读仍有可能发生
        isolation_serializable  完全服从acid隔离原则,确保不发生脏读、不可重复读、和幻读,但执行效率最低。
      2. 脏读、幻读及不可重复读
        脏读 指当一个事务正字访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。
        不可重复读 指在一个事务内,多次读同一数据。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。
        幻读 一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)
    4. timeout :事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。
    5. read-only :指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。
    6. rollback-for :用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。
    7. no-rollback- for :抛出 no-rollback-for 指定的异常类型,不回滚事务。
  2. Transactional 支持类级别上,表示所有该类的公共方法都配置相同的事务属性信息。
  3. Transactional 应用在public方法上
@Transactional(rollbackFor=SQLException.class)
 @Transactional(rollbackFor=RuntimeException.class, noRollbackFor=NullPointerException.class)
 @Transactional(propagation=Propagation.REQUIRES_NEW, timeout=5000)
           

参考博客:https://blog.csdn.net/Jmilk/article/details/50461577 

(网易云免费课堂)参考资料:http://study.163.com/course/courseMain.htm?courseId=1005213034

参考:(spring事务隔离级别、传播机制以及简单配置_不积跬步 无以至千里-CSDN博客_spring设置事务隔离级别)

参考:IBM Developer 正在整合其语言站点组合。 – IBM Developer