67,512
社区成员
发帖
与我相关
我的任务
分享
package com.galaxylab.huanwei.service;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.galaxylab.huanwei.dao.TokenDAO;
import com.galaxylab.huanwei.domain.Token;
import com.galaxylab.huanwei.dto.GetTokenResponse;
import com.galaxylab.huanwei.jdbc.CommonConfig;
import com.galaxylab.huanwei.util.HttpUtil;
import com.google.gson.Gson;
public class AccessTokenGenerationService {
private final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
private final Logger logger = LoggerFactory.getLogger(getClass());
public AccessTokenGenerationService() {}
public void start() {
Runnable task = new TokenRefresher();
logger.info("Start AccessTokenGenerationService()");
scheduledExecutorService.scheduleWithFixedDelay(task, 0, 600,TimeUnit.SECONDS);
}
}
class TokenRefresher implements Runnable{
private final TokenDAO tokenDAO = new TokenDAO();
private final long GRACE_PERIOD = 1800000;
private final Logger logger = LoggerFactory.getLogger(getClass());
public Gson gson = new Gson();
@SuppressWarnings("static-access")
@Override
public void run() {
try{
Token token = tokenDAO.getToken();
logger.info("latest token is {}",token);
if(token.getGoodUntil().getMillis() - DateTime.now().getMillis() < GRACE_PERIOD) {
logger.info("Start getting new token");
String url = CommonConfig.WECHAT_ACCESS_TOKEN_SERVICE_URL
.replace("APPID", CommonConfig.WECHAT_APP_ID)
.replace("APPSECRET", CommonConfig.WECHAT_SECURITY_KEY);
logger.info("URL is {}",url);
String response = HttpUtil.get(url);
GetTokenResponse getTokenResponse = gson.fromJson(response, GetTokenResponse.class);
Token new_token = new Token(getTokenResponse.getAccess_token(),
new DateTime().now().plusSeconds(Integer.valueOf(getTokenResponse.getExpires_in())));
tokenDAO.updataToken(new_token);
}
}catch(Exception e) {
logger.error("Exception",e);
}
}
}