事务

百度百科是个好东西
https://jingyan.baidu.com/article/e8cdb32b43b5e637042bad7d.html
https://baike.baidu.com/item/%E4%BA%8B%E5%8A%A1%E9%9A%94%E7%A6%BB%E7%BA%A7%E5%88%AB

编程式事务
手动commit和rollback

@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
trycatch后可使用 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

rallback级别
针对于有多处插入和修改语句

对名词的解释
isolation隔离级别
脏读 - A事务执行了增删改未提交,B事务可读取A事务未提交数据,当A事务提交后,B事务读取到的就是脏数据
(不可)重复读 - A事务两次读操作,B事务在两次读取途中修改了数据,使A事务两次读取到的数据不一致
幻读 - A事务根据条件批量修改一张表的某个字段数据,B事务用该条件新插入数据,此时A事务批量修改过程中出现了幻行,即A事务将丢失对新数据的修改

脏读特指读了未提交事务,不可重复/幻读指特指读了已提交事务

0 read-uncommitted 导致脏读
1 read-committed 避免脏读,允许不可重复读和幻读
2 repeatable-read 避免脏读,不可重复读,允许幻读
3 serializable 事务只能一个一个执行(同步),效率低下,避免了脏读,不可重复读,幻读

默认隔离级别
InnoDB 默认使用REPEATABLE READ 隔离级别,主要用来保证主从复制在STATEMENT语句级别下数据一致。
如果在MySQL 5.1版本后二进制日志使用ROW级别,则可将默认事务隔离级别修改为READ COMMITTED以提高事务并发性。

常用隔离级别为 read-committed 举例:A事务处理订单支付成功失败的业务结果增改数据库,B事务期间不断轮询查询支付结果,避免脏读
不可重复读和幻读,在代码和业务层面是可以被允许的,因为最终读取的都是已经提交事务结果

propagation传播特性
spring默认的事务传播级别为PROPAGATION_REQUIRED 常用级别为PROPAGATION_REQUIRES_NEW
PROPAGATION_REQUIRES_NEW创建举例:方法B(批量修改表一些字段数据),方法A中for循环里确定启用方法B,即事务B出错不影响事务A

1.PROPAGATION_REQUIRED A方法声明的事务不在B方法声明的事务里,则新建事务,同根生(A或B由异常作为整体回滚)
2.PROPAGATION_REQUIRES_NEW A方法声明的事务在B方法声明的事务里,A事务错误不影响B事务

3.PROPAGATION_SUPPORTS 有A事务则支持,没有则非事务执行(即不满足ACID特性)
4.PROPAGATION_MANDATORY 有A事务则支持,没有则抛异常
5.PROPAGATION_NOT_SUPPORTED 非事务执行
6.PROPAGATION_NEVER 非事务执行,存在事务抛出异常
7.PROPAGATION_NESTED
PROPAGATION_NESTED 开始一个 “嵌套的” 事务, 它是已经存在事务的一个真正的子事务. 潜套事务开始执行时, 它将取得一个 savepoint. 如果这个嵌套事务失败, 我们将回滚到此 savepoint. 嵌套事务是外部事务的一部分, 只有外部事务结束后它才会被提交.

传播特性7参考
https://www.cnblogs.com/deepminer/p/12128677.html

文件的断点续传 待续
接收到请求后,分片上传下载,MD5作为每个分片为2m的数字指纹,偏移量叠加后继续下一个分片的上传下载

springboot工程使用版本号Greenwhich

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
<skywalking.version>5.0.0-GA</skywalking.version>

对于Shiro的鉴权验证
ShiroRealm extends AuthorizingRealm
重写
doGetAuthenticationInfo
doGetAuthorizationInfo

org.apache.shiro shiro-spring 1.2.5 org.apache.shiro shiro-ehcache 1.2.5 com.auth0 java-jwt 3.2.0

注销
发送注销验证码
校验
定时的物理删除和逻辑删除用户信息

task任务调度处理
方式一:
创建一个任务
JobDetail
声明一个触发器规定时间触发
Trigger
集成后执行任务
extends QuartzJobBean

方式二:
创建一个定时任务管理类来 进行任务的增删查改
QuarzManager
创建一个任务
JobDetail
声明一个触发器规定时间触发
Trigger(该处使用cron的表达式规定时间触发)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值