12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package com.ematou.wxbase.scheduler;
- import com.ematou.wxbase.common.utils.DateUtils;
- import com.ematou.wxbase.entity.TokenRecord;
- import com.ematou.wxbase.service.TokenRecordService;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.EnableScheduling;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- import org.springframework.util.CollectionUtils;
- import java.text.ParseException;
- import java.util.Date;
- import java.util.List;
- import java.util.stream.Collectors;
- /**
- * @author lhm
- * @version 1.0
- * 2021-05-06 15:50
- */
- @Component
- @EnableScheduling
- public class RefreshAccessTokenScheduler {
- private static final Logger logger = LoggerFactory.getLogger(RefreshAccessTokenScheduler.class);
- @Autowired
- TokenRecordService tokenRecordService;
- /**
- * 定时器刷新token
- */
- @Scheduled(cron = "0 0 0/2 * * ?", zone = "Asia/Shanghai")
- public void refreshAccessToken() {
- try {
- logger.info("定时器开始刷新Token...");
- tokenRecordService.generateToken();
- } catch (Exception e) {
- logger.error("定时刷新Token失败!errorMessage: " + e.getMessage());
- }
- }
- /**
- * 扫描数据库中失效的token,修改其状态(is_valid)为1
- */
- @Scheduled(cron = "0 3 0/2 * * ?", zone = "Asia/Shanghai")
- public void scanExpiryToken() {
- logger.info("开始扫描库中中失效的token记录......");
- int count = tokenRecordService.queryLatestAndValidRecordCount();
- if (count >= 1) {
- // 有生效的token,查询这些token,计算它们的过期时间,并修改已过期的token的状态为已失效
- List<TokenRecord> tokenRecords = tokenRecordService.queryTokenIsValid();
- if (CollectionUtils.isEmpty(tokenRecords)) {
- return;
- }
- // 需要更新的记录的id数组
- List<Integer> resultList = tokenRecords.stream().filter(tokenRecord -> {
- // 计算是否需要修改状态,这里对比一下失效时间和当前时间差多少时间即可
- String expiresTime = tokenRecord.getExpiresTime();
- Date tokenExpiresTime;
- try {
- tokenExpiresTime = DateUtils.parseString(expiresTime);
- } catch (ParseException e) {
- logger.error("时间转换失败!errorMessage: " + e.getMessage());
- return false;
- }
- Date now = new Date();
- long diff = now.getTime() - tokenExpiresTime.getTime();
- // 失效时间后3分钟置为失效token
- return diff >= (3 * 60 * 1000);
- }).map(TokenRecord::getId).collect(Collectors.toList());
- // 批量更新
- tokenRecordService.updateBatchRecord(resultList);
- logger.info("批量更新token状态成功!");
- }
- }
- }
|