Java工具类实现类似“超时”的效果
最后更新于
最后更新于
大家看这个 controller 很简单
就是每次请求他都做一个打印
就像这样
对吧那现在有个需求
就是不要让他每次请求都打印
我们需要实现一个类似于超时
3秒的效果
比如说他第一次请求进来之后呢
先不要打印等3秒(但正常响应)
如果这3秒钟之内
又有一个新请求进来
我们再重新计时再来3秒
直到最后超过3秒没有任何请求了
我们在一起打印一个总数
那碰这种延迟
或者叫超时的需求怎么实现呢
我给大家分享一个好玩的工具类
这个类呢是我自己封装的
它也特别简单
用到的都是java.util里边的一些类
然后怎么用呢
首先我们需要自己写一个 service
来继承这个类
然后把它注册成 spring 的 service
然后这个泛型是什么意思呢
就是根据你不同的业务需求
比如说我们这次的业务
就是做一个数据的累加
然后这个done(方法)是啥意思呢
就是最终那个3秒超时之后
最后走这个方法
然后怎么用呢
我们把它注入到这个 controller 里边
我现在注入好了
然后在这我们直接delay
这里边不是3秒吗我们就3,000毫秒
然后这里有个 callback
callback 什么意思呢
就是
他在两种情况下会调用
第一种情况就是第一次调用
用这个 old 还是空
所以呢我判断一下
如果 old 为空我们直接return一个否则的话呢每次都是 old + 1 就好了
我们在这打一个输出更新一下对
然后呢我们重启一下
好
我们来
试一下
大家看:更新 null (说明第一次)
再来、更新 注意看时间啊
现在13(秒)我们等2秒再来
他(15秒的时候)没有结束对吧
然后我们等一下
结束了大家看
15秒到18秒正好3秒
总共的次数是5次
这样就可以了
那如果一个项目里
有多个这种需求的话呢
大家就写多个这种 子类继承他就好了
比如说我这还写了一个这个(demo)
最后更新的字母串
大家看这是字母串类型的然后呢
哇这还有一个请求
他这个就每次更新
就是覆盖一个自动串
就把他最后的这个参数附进去
我们再来试一下这个哈
先来一个345 然后等3秒
大概最后一次就是所以呢
如果发挥想象的话呢
这块可以写一些封装类型
自己封装一些类
甚至我们放 list 的都可以
这个工具类呢
我还是把它放到了这个 get
gitlab(口误:github)的这个地方
大家有需要的话呢
可以自己来找