SyncTimeTaskSchedule.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package com.zksy.data.schedule;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.zksy.data.domain.po.XhTimeTask;
  4. import com.zksy.data.mapper.XhTimeTaskMapper;
  5. import com.zksy.data.utils.TaskManager;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.context.ApplicationContext;
  8. import org.springframework.scheduling.annotation.EnableScheduling;
  9. import org.springframework.scheduling.annotation.Scheduled;
  10. import org.springframework.stereotype.Component;
  11. import java.util.List;
  12. @Component
  13. @EnableScheduling
  14. public class SyncTimeTaskSchedule {
  15. @Autowired
  16. private TaskManager taskManager;
  17. @Autowired
  18. private XhTimeTaskMapper xhTimeTaskMapper;
  19. @Autowired
  20. private CollectDataSchedule collectDataSchedule;
  21. @Autowired
  22. private ApplicationContext applicationContext;
  23. /**
  24. * 每天进行一次xhTimeTask 表数据同步定时任务
  25. */
  26. @Scheduled(cron = "0 0 0 * * ?")
  27. // @Scheduled(cron = "*/10 * * * * *")
  28. public void syncXhTimeTask(){
  29. //把xhtimetask这个表的所有service_name 都取出来放在一个list中
  30. LambdaQueryWrapper<XhTimeTask> wrapper = new LambdaQueryWrapper<>();
  31. wrapper.eq(XhTimeTask::getEnabled,1);
  32. List<XhTimeTask> list = xhTimeTaskMapper.selectList(wrapper);
  33. //判断list的长度和taskManager.getTaskMap()的长度是否一致,如果不一致就进行同步
  34. taskManager.stopAllTasks();
  35. if(list.size()!=taskManager.getTaskMap().size()){
  36. list.parallelStream().forEach(task->{
  37. if(!taskManager.getTaskMap().containsKey(task.getTaskName())){
  38. taskManager.addTask(task.getTaskName(),() -> {
  39. //暂时先打印
  40. // Object bean = applicationContext.getBean(task.getServiceName());
  41. // if(bean instanceof IBaseSaveDataInterface){
  42. // ((IBaseSaveDataInterface) bean).saveDataByUniCode(collectDataSchedule.serviceMap.get(task.getServiceName()));
  43. // }
  44. System.out.println("执行任务"+task.getServiceName());
  45. }, task.getCronExpression());
  46. }
  47. });
  48. }
  49. //taskManager.getTaskMap()判断这个集合中的key有没有这个service_name,如果没有就先从xhtimetask取出数据添加进定时任务
  50. }
  51. }