SpringBoot配置定时任务可以直接使用自带的Scheduled,这相当于一个轻量级的Quartz,它可以让我们直接使用注解来完成定时任务的配置。
1.定时任务方法
/**
* 定时任务
*
* @author <a href="mailto:lyj@zjtachao.com">lyj</a>
* @since 2.0
*/
@Configuration
@EnableScheduling
public class TigerDataApproveTask {
/** 日志 **/
public static final Logger logger = LoggerFactory.getLogger(TigerDataApproveTask.class);
@Resource
public WaterRedis waterRedis;
/** 拳手信息service */
@Resource
private TigerDataBoxerBaseInfoService tigerDataBoxerBaseInfoService;
/**
* 保存点赞数 、浏览数
*/
@Scheduled(cron="1 * * * * *")
public void executeSaveApproveNum(){
try{
logger.info("开始保存点赞数 、浏览数");
//取出浏览数的 key
Set<String> viewSet = waterRedis.smembers(TigerCommonConstant.TIGER_DATA_VIEW_COUNT_KEY);
//删除浏览数的 key
waterRedis.delete(TigerCommonConstant.TIGER_DATA_VIEW_COUNT_KEY);
//保存浏览数
if(null != viewSet && !viewSet.isEmpty()) {
for (String boxerCode : viewSet) {
long viewCount = waterRedis.increment(TigerCommonConstant.TIGER_DATA_SAVE_VIEW_COUNT_CODE_KEY+boxerCode , 0, 0);
if (0 != viewCount) {
//保存数据库
TigerBoxerBaseInfo boxerBaseInfo = new TigerBoxerBaseInfo();
boxerBaseInfo.setBoxerCode(boxerCode);
boxerBaseInfo.setVisitNum(viewCount);
tigerDataBoxerBaseInfoService.updateBoxerApprove(boxerBaseInfo);
}
}
}
//取出点赞数量的 key
Set<String> approveSet = waterRedis.smembers(TigerCommonConstant.TIGER_DATA_APPROVE_COUNT_KEY);
//删除点赞数量ID的 key
waterRedis.delete(TigerCommonConstant.TIGER_DATA_APPROVE_COUNT_KEY);
//保存点赞数
if(null != approveSet && !approveSet.isEmpty()){
for (String boxerCode: approveSet) {
long approveCount = waterRedis.increment(TigerCommonConstant.TIGER_DATA_SAVE_APPROVE_COUNT_CODE_KEY+boxerCode,0,0);
if(0 != approveCount){
//保存数据库
TigerBoxerBaseInfo boxerBaseInfo = new TigerBoxerBaseInfo();
boxerBaseInfo.setBoxerCode(boxerCode);
boxerBaseInfo.setApproveNum(approveCount);
tigerDataBoxerBaseInfoService.updateBoxerApprove(boxerBaseInfo);
}
}
}
logger.info("结束保存点赞数 、浏览数");
}catch (Exception ex){
logger.error("生成保存点赞数 、浏览数" ,ex);
}
}
}
2.代码中增加浏览 、点赞,用到了redis的set,存需要更新的数据的主键
/**
* 定时任务
*
* @author <a href="mailto:lyj@zjtachao.com">lyj</a>
* @since 2.0
*/
@Configuration
@EnableScheduling
public class TigerDataApproveTask {
/** 日志 **/
public static final Logger logger = LoggerFactory.getLogger(TigerDataApproveTask.class);
@Resource
public WaterRedis waterRedis;
/** 拳手信息service */
@Resource
private TigerDataBoxerBaseInfoService tigerDataBoxerBaseInfoService;
/**
* 保存点赞数 、浏览数
*/
@Scheduled(cron="1 * * * * *")
public void executeSaveApproveNum(){
try{
logger.info("开始保存点赞数 、浏览数");
//取出浏览数的 key
Set<String> viewSet = waterRedis.smembers(TigerCommonConstant.TIGER_DATA_VIEW_COUNT_KEY);
//删除浏览数的 key
waterRedis.delete(TigerCommonConstant.TIGER_DATA_VIEW_COUNT_KEY);
//保存浏览数
if(null != viewSet && !viewSet.isEmpty()) {
for (String boxerCode : viewSet) {
long viewCount = waterRedis.increment(TigerCommonConstant.TIGER_DATA_SAVE_VIEW_COUNT_CODE_KEY+boxerCode , 0, 0);
if (0 != viewCount) {
//保存数据库
TigerBoxerBaseInfo boxerBaseInfo = new TigerBoxerBaseInfo();
boxerBaseInfo.setBoxerCode(boxerCode);
boxerBaseInfo.setVisitNum(viewCount);
tigerDataBoxerBaseInfoService.updateBoxerApprove(boxerBaseInfo);
}
}
}
//取出点赞数量的 key
Set<String> approveSet = waterRedis.smembers(TigerCommonConstant.TIGER_DATA_APPROVE_COUNT_KEY);
//删除点赞数量ID的 key
waterRedis.delete(TigerCommonConstant.TIGER_DATA_APPROVE_COUNT_KEY);
//保存点赞数
if(null != approveSet && !approveSet.isEmpty()){
for (String boxerCode: approveSet) {
long approveCount = waterRedis.increment(TigerCommonConstant.TIGER_DATA_SAVE_APPROVE_COUNT_CODE_KEY+boxerCode,0,0);
if(0 != approveCount){
//保存数据库
TigerBoxerBaseInfo boxerBaseInfo = new TigerBoxerBaseInfo();
boxerBaseInfo.setBoxerCode(boxerCode);
boxerBaseInfo.setApproveNum(approveCount);
tigerDataBoxerBaseInfoService.updateBoxerApprove(boxerBaseInfo);
}
}
}
logger.info("结束保存点赞数 、浏览数");
}catch (Exception ex){
logger.error("生成保存点赞数 、浏览数" ,ex);
}
}
}
//保存 浏览数量的 key waterRedis.sadd(TigerCommonConstant.TIGER_DATA_VIEW_COUNT_KEY,tigerBoxerBaseInfoRo.getBoxerCode());
//每次调用接口,浏览数量增加1 waterRedis.increment(TigerCommonConstant.TIGER_DATA_SAVE_VIEW_COUNT_CODE_KEY+tigerBoxerBaseInfoRo.getBoxerCode(),1)
//保存 点赞数量ID的 key
waterRedis.sadd(TigerCommonConstant.TIGER_DATA_APPROVE_COUNT_KEY,boxerCode);
//每次调用接口,点赞数量增加1
waterRedis.increment(TigerCommonConstant.TIGER_DATA_SAVE_APPROVE_COUNT_CODE_KEY+boxerCode,1);
3.定义的redis的key
//保存 浏览数量的 key waterRedis.sadd(TigerCommonConstant.TIGER_DATA_VIEW_COUNT_KEY,tigerBoxerBaseInfoRo.getBoxerCode());
//每次调用接口,浏览数量增加1 waterRedis.increment(TigerCommonConstant.TIGER_DATA_SAVE_VIEW_COUNT_CODE_KEY+tigerBoxerBaseInfoRo.getBoxerCode(),1)
//保存 点赞数量ID的 key
waterRedis.sadd(TigerCommonConstant.TIGER_DATA_APPROVE_COUNT_KEY,boxerCode);
//每次调用接口,点赞数量增加1
waterRedis.increment(TigerCommonConstant.TIGER_DATA_SAVE_APPROVE_COUNT_CODE_KEY+boxerCode,1);
/** 保存 浏览数量增加1 的 key**/
public static final String TIGER_DATA_VIEW_COUNT_KEY = "tiger:boxer:task:view.count.key";
/** 保存拳手 浏览数量的 key**/
public static final String TIGER_DATA_SAVE_VIEW_COUNT_CODE_KEY = "tiger:boxer:task.view.count.code.key.";
/** 保存 点赞数量增加1 的 key**/
public static final String TIGER_DATA_APPROVE_COUNT_KEY = "tiger:boxer:task:approve.count.key";
/** 保存拳手 点赞数的 key**/
public static final String TIGER_DATA_SAVE_APPROVE_COUNT_CODE_KEY = "tiger:boxer:task.approve.count.code.key.";
4.cron
/** 保存 浏览数量增加1 的 key**/
public static final String TIGER_DATA_VIEW_COUNT_KEY = "tiger:boxer:task:view.count.key";
/** 保存拳手 浏览数量的 key**/
public static final String TIGER_DATA_SAVE_VIEW_COUNT_CODE_KEY = "tiger:boxer:task.view.count.code.key.";
/** 保存 点赞数量增加1 的 key**/
public static final String TIGER_DATA_APPROVE_COUNT_KEY = "tiger:boxer:task:approve.count.key";
/** 保存拳手 点赞数的 key**/
public static final String TIGER_DATA_SAVE_APPROVE_COUNT_CODE_KEY = "tiger:boxer:task.approve.count.code.key.";
1 * * * * *
每分钟更新一次
1 * * * * *
每分钟更新一次