基于springboot的Java快速定时任务

一、常用的定时任务管理XXL-JOB,但是如果快速使用定时任务使用

复制代码
ApplicationRunner也很快,不要引入第三方包

示例代码:

java 复制代码
import cn.ctg.bfws.client.CtgConfigureClient;
import cn.ctg.bfws.vo.PmApproveHourVo;
import cn.ctg.common.response.ResponseData;
import cn.ctg.configure.dto.SysProjectDto;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import lombok.extern.slf4j.Slf4j;

import javax.annotation.Resource;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * 线程服务类
 * 
 * @Description:
 */
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class ToolServiceThread implements ApplicationRunner {
    @Resource
	private CtgConfigureClient ctgConfigureClient;

	@Resource
	private PmApproveService pmApproveService;

	@Value("${bill.projectGs.billTempId:}")
	private String billTempId;
	@Value("${bill.projectGs.comTempCode:}")
	private String comTempCode;

	@Value("${bill.projectGs.categoryId:}")
	private String categoryId;

	@Override
	public void run(ApplicationArguments args) throws Exception {
		log.info("开启线程.....,");
	}

		/**
		 * 每5分钟后执行
		 */
		@Scheduled(cron = "0 */5 * * * ?")
		public void executeEvery30Seconds () throws Exception {
			//自动拉取成员单,更新项目经理工时单
			log.info("更新项目经理工时单...");
			ResponseData<List<SysProjectDto>>  res = ctgConfigureClient.selectList();
			YearMonth yearMonthObj = YearMonth.now();
			String yearMonth = yearMonthObj.format(DateTimeFormatter.ofPattern("yyyyMM"));
			if(res.isSuccess()){
				List<SysProjectDto> list = res.getData();
				for (SysProjectDto sysProjectDto : list) {
					PmApproveHourVo vo  = new  PmApproveHourVo();
					vo.setMonth(yearMonth);
					vo.setProjectCode(sysProjectDto.getCode());
					String  userId =sysProjectDto.getManagers();
					if(sysProjectDto.getManagers().contains("^")) {
						userId = sysProjectDto.getManagers().split("^")[0];
					}
					pmApproveService.waitApproveList(vo,userId);
					log.info("更新项目经理工时单...:{}", JSON.toJSONString(sysProjectDto));
				}
			}

		}


	/**
	 * 每月5号生成项目经理公式模版示例
	 */
	@Scheduled(cron = "0 0 0 5 * ?")
	public void createPmGsBill () throws Exception {
		//自动拉取成员单,更新项目经理工时单
		log.info("每月5号生成项目经理工时模版...");
		ResponseData<List<SysProjectDto>>  res = ctgConfigureClient.selectList();
		YearMonth yearMonthObj = YearMonth.now();
		String yearMonth = yearMonthObj.format(DateTimeFormatter.ofPattern("yyyyMM"));
		//pmApproveService.createProjectBill(billTempId,comTempCode,categoryId);

	}

}

注意的是需要在启动类上加上注解

复制代码
@EnableScheduling 要不然定时任务是无效的

示例:

相关推荐
代码漫谈1 分钟前
Spring Boot日志配置全攻略:打造高效、可靠的日志系统
java·spring boot·log4j·日志
ideal-cs4 分钟前
总结:生产环境Release、Snapshot两种包版本该如何管理与发布构建
java·maven·snapshot·release
yangminlei5 分钟前
Spring Boot Starter自定义开发 构建企业级组件库
java·spring boot·后端
牛奶咖啡135 分钟前
CI/CD——在jenkins中构建流程实现springboot项目的自动化构建与部署
java·ci/cd·k8s·jenkins·springboot·springboot制作镜像·使用源码项目制作镜像
扬帆破浪6 分钟前
免费开源AI软件.桌面单机版,可移动的AI知识库,察元 AI桌面版:装一台到家用台式 把工作笔记本的对话历史迁过去
人工智能·windows·电脑·知识图谱
桔筐6 分钟前
Redis 无锁化库存扣减方案(INCR + SETNX 实现,高并发不超卖)
java·redis
接着奏乐接着舞7 分钟前
springboot 常用注解
spring boot·后端·python
AI人工智能+电脑小能手9 分钟前
【大白话说Java面试题 第44题】【JVM篇】第4题:什么时候会触发 Young GC?什么时候会触发 Full GC?
java·开发语言·jvm·后端·面试
最幸伏的人19 分钟前
PyCharm无限创建Python进程故障总结
windows·python·pycharm
小妖66621 分钟前
js 实现python的SortedList有序集合
java·javascript·python