最近遇到个定时任务的问题,定时任务每小时去微信申请一个新的accesstoken,业务需要拿到token来生成微信二维码。
为什么要用定时获取token呢,是因为微信的这个token是两小时过期一次,而且token申请每天是有限制的,不能每一次业务请求都去重新申请token,token必须复用。基于这个情况下,选择了目前的这种架构方案。
现在的问题是无法保证系统在刚启动的时候就有token了,因为定时任务是1小时执行一次,系统启动的时候任务大概率是不会执行的。
所以我的问题就是怎么样在系统启动的时候去主动触发一次任务
就这个问题而言,可以使用fixeddelay,fixedrate注解代替cron表达式,这俩注解都会在系统启动的时候执行一次任务。
也可以利用spring容器生命周期相关解决方案来主动调用任务执行一次。
当然最方便的是利用spring bean的生命周期相关解决方案。最简单的就是在任务上再加一个@postconstruct注解。这样这个bean实例化完,依赖属性注入完以后就会执行一次定时任务,比较方便。
多了解一些spring底层的东西,开发时候的选择会更多,解决方案会更加优雅。