1、pom.xml引用依赖
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-worker-spring-boot-starter</artifactId>
<version>4.0.1</version>
</dependency>
2、bootstrap.yml
powerjob:
worker:
akka-port: 27778
app-name: my_test
server-address: 127.0.0.1:7700
store-strategy: disk
max-result-length: 4096
max-appended-wf-context-length: 4096
3、新建 MemberExpiredScheduled 类文件, 分布式任务调度
package com.my.test.scheduled;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.uini.user.entity.UiniUser;
import com.uini.user.mapper.UiniUserMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Date;
@Component
public class MemberExpiredScheduled implements BasicProcessor {
private static final Logger log = LoggerFactory.getLogger(MemberExpiredScheduled.class);
private static final String DATETIME_FORMATTER = "yyyy-MM-dd HH:mm:ss";
@Resource
private UiniUserMapper uiniUserMapper;
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("过期更新定时任务触发开始时间: {}", LocalDateTimeUtil.format(LocalDateTime.now(), DATETIME_FORMATTER));
/*
* 每天晚上0点1分更新
* 用户角色: 0-普通用户、1-会员
* 过期用户更新为普通用户,用户角色从1变为0
*/
UpdateWrapper<UiniUser> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("vip_stat", 1);
updateWrapper.lt("vip_expired_time", new Date());
UiniUser uiniUser = new UiniUser();
uiniUser.setVipStat((byte) 0);
uiniUserMapper.update(uiniUser, updateWrapper);
log.info("过期更新定时任务触发结束时间: {}", LocalDateTimeUtil.format(LocalDateTime.now(), DATETIME_FORMATTER));
// 返回结果,该结果会被持久化到数据库,在前端页面直接查看,极为方便
return new ProcessResult(true, "member expired process successfully~");
}
}
4、登录PowerJob控制台
任务管理——>新建任务: