微信公众号开发-accessToken更新

cron相关配置:

一般系统都会有定时任务存在,比如订单系统,会根据定时任务来实时同步订单状态,同步交易状态等等。定时任务可以使用Quartz 定时任务,也可以自己写一个任务调度系统,只要能实现功能就可以。

        下面我简单介绍一下Quartz 定时任务配置,需要配置三个bean,分别为:quartz,trigger,scheduler:

quartz:配置目标bean和方法

trigger:触发器,配置quartz和cron表达式,指定触发时机

scheduler:将触发器配置到任务调度中

 

<!-- ****work start*********** -->
<bean id="updateAccessTokenQuartz" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!--配置quartz-->
    <property name="targetObject" ref="accessTokenService" /><!--目标类,配置bean-->
    <property name="targetMethod" value="updateAccessToken" /><!--目标方法-->
    <property name="concurrent" value="false" />
</bean>
<bean id="updateAccessTokenTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><!--配置触发器-->
    <property name="jobDetail" ref="updateAccessTokenQuartz" /><!--连接quartz对象-->
    <!--cron表达式-->
    <property name="cronExpression" value="0 0 0/1 * * ?" />
</bean>
<bean id="updateAccessTokenScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><!--配置-Scheduler->
    <property name="triggers">
        <list>
            <ref bean="updateAccessTokenTrigger" /><!--连接trigger-->
        </list>
    </property>
    <property name="autoStartup">
        <value>false</value>
    </property>
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.threadPool.threadCount">1</prop>
        </props>
    </property>
</bean>
 

代码:

public static final String WX_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=Grant&appid=AppId&secret=AppSecret";
//service 代码
package com.demo.mobile.service.impl;

import org.springframework.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.demo.mobile.constant.Constant;
import com.demo.mobile.service.WxAccessokenService;
import com.demo.mobile.util.SSLClient;
import com.demo.mobile.platform.common.bean.BaseService;
importcom.demo.mobile.platform.common.cache.RedisCache ;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.util.StreamUtils;

import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Map;

/**
 * @description: 获取token
 * @author: feng
 * @create: 2018
 **/
@Service
public class WxAccessTokenServicempl extends BaseService implements WxAccessTokenService {

    @Resource
    private RedisCache redisCache;

    @Override
    public String getAccessToken() {
        String s = redisCache.get(Constant.KEY);
        logger.info("WxAccessokenServicempl-getAccessToken:{}", s);
        if (StringUtils.isEmpty(s)) {
            updateAccessToken();
            s = redisCache.get(Constant.KEY);
            logger.info("WxAccessokenServicempl-updateAccessToken-result:{}", s);
        }
        return s;
    }

    @Override
    public void setAccessToken(String token) {
        redisCache.set(Constant.KEY, token);
    }

    @Override
    public Boolean deleteAccessToken() {
        return redisCache.delete(Constant.KEY) > 0L;
    }


    public Boolean updateAccessToken() {
        SSLClient client = null;
        String url = Constant.WX_ACCESS_TOKEN.replace("Grant", Constant.GRANT).replace("AppId", Constant.WX_APPID).replace("AppSecret", Constant.WX_APPSECRET);
        HttpGet get = new HttpGet(url);
        logger.info("WxTokenWorkerImpl-url:{}", url);
        HttpResponse execute = null;
        try {
            client = new SSLClient();
            execute = client.execute(get);
            //logger.info("updateAccessToken:{}",JSON.toJSONString(execute));
            if (execute.getStatusLine().getStatusCode() == HttpStatus.OK.value()) {
                HttpEntity entity = execute.getEntity();
                InputStream content = entity.getContent();
                String s = StreamUtils.copyToString(content, Charset.forName("UTF-8"));
                Map map = JSON.parseObject(s, Map.class);
                logger.info("updateAccessToken-map:{}", JSON.toJSONString(map));
                String access_token = (String) map.get("access_token");
                logger.info("updateAccessToken-access_token:{}", JSON.toJSONString(access_token));
                if (StringUtils.isEmpty(access_token)) {
                    return false;
                }
                redisCache.delete("access_token");
                redisCache.set("access_token", access_token);
                return true;

            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

bean配置:

<bean id="accessTokenService" class="com.demo.mobile.service.impl.WxAccessTokenService"></bean>

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值