缓存微信接口凭据access_token:初步认识ServletContext

 

本人之前一直从事微信公众号的开发,最近遇到这么一个问题:在调用微信的各个接口的时候,需要在调用接口的时刻向微信服务器传送acces_token参数,access_token是微信公众号接口的调用凭据,access_token本身也是通过调用微信的接口得到的,但access_token的获取频率是有限制的,每天只能获取2000次,每次有效时间为120分钟,在微信开发者文档上说明如下:

那么,我们就需要将access_token缓存下来。若要将access_token缓存下来,以供全局使用,本人一下想到的是两个方法:1.使用redis、memcached等第三方工具缓存。2.使用application缓存。先说说第一种方法,第一种方法是使用第三方插件实现的,如果项目中已经搭好了插件,直接使用即可,但由于我这个项目在时间上有压力,而且更重要的一点是,我的项目先前并未使用任何缓存插件,缓存都是session级别的,而且除了access_token,没有别的全局变量,所以如果仅仅为了access_token而搭建整个缓存插件,从时间上、项目的轻量性上显得特别的不划算,所以我把目光转移到了application上了。现在来详细说说application。首先贴出代码:

WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext(); 
ServletContext application = webApplicationContext.getServletContext();

从以上代码看出,application是从ServletContext实例化而来,那么我们就需要了解一下ServletContext的特性。首先看看ServletContet的API文档:

 

ServletContext是一个全局的储存信息的空间,这意味着它在整个应用中是共享的,它的生命周期存在于服务器启动直至服务器关闭,项目运行期间,也就是它的生命周期期间。

从以上的分析可以得知,ServletContext满足这次我缓存access_token的需求,所以这次就决定用它了!

首先是实例化ServletContext:

 WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
 ServletContext application = webApplicationContext.getServletContext();

       然后调用微信的接口,获取access_token,在得到access_token之后,只需要调用ServletContext的setAttribute方法缓存access_token:

application.setAttribute("accessToken", accessToken);

       需要取出access_token的时候,只需调用ServletContext的getAttribute方法即可,就像调用session的方法一样,是不是很方便?

小项目在不适用redis、memcached等工具的情况下,ServletContext是一个不错的用于缓存全局变量的选择!

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值