springboot的自带的定时器的调度使用
在日常开发中,我们有时会遇到这样一种情况,根据一定的额度、规定的次数,进行返送积分,接下来,我就来做一个列子。
需求就是按次数按送积分。
实现
数据库
- 设置次数字段
- 设置关联(id,或者编号什么的,能在一张表中作区分)
- 设置总积分数
后台逻辑代码
-
在类上开启定时器 @EnableScheduling
-
设置设置定时方法
/**
* @Scheduled(cron = "0 05 10 ? * * 0/5 * * * * ?")
* 每天固定 10:05:00 执行程序
*/
@Scheduled(cron = "0 05 10 ? * *")
public void cornTest() {
setIntegral();
}
在方法上加注解 @Scheduled() 取值有多种 ,默认第一种, cron表达式,百度会有在线表达式编写、转换等。
- 循环逻辑方法
public void setIntegral() {
//获取自己设置的数据库积分表(积分表自定义,)
List<Demo> demos = demoDao.getDemoAllList();
//遍历所有的数据
for (Demo demo : demos) {
//获取积分的次数
Integer integralNumber = demo.getIntegralNumber();
//判断 当次数不等于null 并且次数大于0时,才可进行次数计算
if (integralNumber != null && integralNumber > 0) {
//获取区分的用户id(这里我用用户id做区分)
Integer userId = demo.getIntegralId();
//判断用户id是否为空
if (userId != null) {
//次数递减
integralNumber--;
//更新支付记录(次数扣减之后要向数据库中更新当前的次数)
demo.updatePayNumber(integralNumber, demo.getId());
//添加积分
Double integral = userById.getuIntegral();
//返送 每天分发积分
//参数设置
DecimalFormat decimalFormat = new DecimalFormat("0.00");
//格式化参数
String ratio = decimalFormat.format((double) demo.getMoney() / 50);
//转换成Double
Double v = Double.valueOf(ratio);
//为用户更新积分
userDao.updateIntegral(userId, BigDecimal.valueOf(v + integral));
//添加积分记录
Date currDate = new Date();
integralLogsDao.addRecord(userId, currDate, v + "", "赠送积分");
}
}
}
}
实现完成。