Spring提供的事务使用起来很方便,一个@Transactional注解就搞定全部,但是如果不注意,也会踩坑 提到事务就应该想到至少以下几点: 1、在事务方法中加锁,可能会导致锁失效 无论是Java自带的锁,还是分布式锁,都有可能出现没锁住的情况 原因是解锁先于事务提交,一旦锁释放后其它线程就可以获取到锁了,由于事务还没提交,所以新线程读到的还是旧数据(跟前一个线程读取到的数据是一样的),这就相当于多个线程做了一模一样的事情了。 正确的做法是:要么别加事务,要么把锁加在事务方法外面 2、调用内部(同一个类中)方法的话,事务不会生效 3、事务方法被声明成private或者final,导致...

  orz5ZuqqSReN   2023年11月01日   91   0   0 Java

众所周知,request.getInputStream()只能调一次。如果希望在请求进入Controller之前统一打印请求参数(拦截器或过滤器),又不影响业务,我们只能将获取到的输入流缓存起来,后续都从缓存中获取即可。 首先,自定义一个ServletInputStream packagecom.cjs.example.log.filter; importjavax.servlet.ReadListener; importjavax.servlet.ServletInputStream; importjava.io.ByteArrayInputStream; importjava.io.IO...

  orz5ZuqqSReN   2023年11月01日   39   0   0 Java

首先,考虑下面这样一个流程图 主要的流程定义如下: <processid="demo"name="demo"isExecutable="true"> <startEventid="sid-aee4f5b6-6b26-423d-85c3-499659fb523b"/> <manualTaskid="sid-f10234c0-9056-4b68-8422-f967d08c1cac"activiti:exclusive="true"name="人工任务1"/> <manualTaskid="sid-fad46cbb-9529-4685-83d1-95cf9...

  orz5ZuqqSReN   2023年11月01日   30   0   0 Java

生产环境,一个简单的事务方法,提交失败,报Globallockwaittimeout 伪代码如下: @GlobalTransactional(rollbackFor=Exception.class,timeoutMills=30000,lockRetryInternal=3000,lockRetryTimes=10) @Override publicBooleancancel(Longid,LonguserId,LongcompanyId){ //保存业务数据 ... //启动工作流 wkflAppServiceProvider.startProcess(....); ... }  ...

  orz5ZuqqSReN   2023年11月01日   59   0   0 Java

关于票据系统设计在之前的博客中也聊过,今天做一个补充 1、架构 票据系统主要就是和票交所进行交互,围绕这一核心,我们把系统划分为三大部分,分别是:票据网关服务、票据业务服务、票据库存服务。 网关服务:对接票交所,负责和票交所的交互,主要是收发报文。 业务服务:负责票据业务的处理,比如出票、背书、贴现等等。 库存服务:负责票据信息的存储,比如票据的交易、正面、背面等。 我简单画了个草图,大概就是如下图这样: 说明一下:图中“指令服务”和“对接票交所”其实它俩可以看成是一个整体,都是为了对接票交所,我这里就统称网关服务了。指令服务其实是在票交所返回的报文基础上做了封装和其它的业务处理,比如申请的...

  orz5ZuqqSReN   2023年11月01日   81   0   0 Java

1. Git对象 Git的核心部分是一个简单的键值对数据库。可以向Git仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容。 所有内容均以树对象和数据对象的形式存储,其中树对象对应了UNIX中的目录项,数据对象则大致上对应了inodes或文件内容。一个树对象包含了一条或多条树对象记录(treeentry),每条记录含有一个指向数据对象或者子树对象的SHA-1指针,以及相应的模式、类型、文件名信息。 Git保存的不是文件的变化或者差异,而是一系列不同时刻的快照。 在进行提交操作时,Git会保存一个提交对象(commitobject),它包含指向树对象...

  orz5ZuqqSReN   2023年11月01日   82   0   0 其他技术区

1.窗口函数概念和语法 窗口函数对一组查询行执行类似聚合的操作。然而,聚合操作将查询行分组到单个结果行,而窗口函数为每个查询行产生一个结果: 函数求值发生的行称为当前行 与发生函数求值的当前行相关的查询行组成了当前行的窗口 相比之下,窗口操作不会将一组查询行折叠到单个输出行。相反,它们为每一行生成一个结果。 SELECT manufacturer,product,profit, SUM(profit)OVER()AStotal_profit, SUM(profit)OVER(PARTITIONBYmanufacturer)ASmanufacturer_profit FROMsales; ...

  orz5ZuqqSReN   2023年11月01日   420   0   0 MySQL
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~