TaskThread.java 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package cn.cslg.pas.service.importPatent;
  2. import cn.cslg.pas.common.core.base.Constants;
  3. import cn.cslg.pas.common.model.cronModel.ImportTaskConfig;
  4. import cn.cslg.pas.common.model.cronModel.OrderConfig;
  5. import cn.cslg.pas.common.vo.ImportTaskAMVO;
  6. import cn.cslg.pas.factorys.PatentImportFactory.PatentImportFactory;
  7. import cn.cslg.pas.factorys.PatentImportFactory.PatentImportImp;
  8. import cn.cslg.pas.service.business.CommonService;
  9. import cn.cslg.pas.service.business.ImportTaskService;
  10. import com.alibaba.fastjson.JSON;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.beans.factory.annotation.Configurable;
  13. import org.springframework.context.ApplicationContext;
  14. import org.springframework.stereotype.Component;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. import java.util.concurrent.locks.Condition;
  18. import java.util.concurrent.locks.Lock;
  19. import java.util.concurrent.locks.ReentrantLock;
  20. @Configurable
  21. public class TaskThread extends Thread {
  22. @Autowired
  23. SchedulingTaskService importTaskAdd;
  24. private ApplicationContext applicationContext;
  25. private final Lock taskThreadLock = new ReentrantLock();
  26. private final Condition taskThreadCondition = taskThreadLock.newCondition();
  27. private final List<Integer> importTaskQueue = new ArrayList<>();
  28. private ImportTaskAMVO importTaskAMVO;
  29. /**
  30. * 从任务队列取出并执行任务
  31. */
  32. public TaskThread(ImportTaskAMVO importTaskAMVO,ApplicationContext applicationContext) {
  33. this.importTaskAMVO = importTaskAMVO;
  34. this.applicationContext =applicationContext;
  35. }
  36. @Override
  37. public void run() {
  38. //TODO 判断任务的类型 调用不同线程(可做工厂类)
  39. String json = CommonService.readJsonFile(Constants.IMPORT_TASK_CONFIG + ".json");
  40. List<ImportTaskConfig> configs = JSON.parseArray(json, ImportTaskConfig.class);
  41. PatentImportFactory patentImportFactory =applicationContext.getBean(PatentImportFactory.class);
  42. //根据任务类型使用不同的导入类
  43. ImportTaskConfig config = configs.stream().filter(item -> item.getTaskType().equals(importTaskAMVO.getType()) && item.getImportTo().equals(Constants.IMPORT_PATENT_TO)).findFirst().orElse(null);
  44. PatentImportImp patentImportImp= patentImportFactory.getClass(config.getImportClass());
  45. patentImportImp.setTaskThread(this);
  46. patentImportImp.startPatentThread();
  47. taskThreadLock.lock();
  48. try {
  49. taskThreadCondition.await();
  50. } catch (InterruptedException e) {
  51. e.printStackTrace();
  52. }
  53. // importTaskAdd.startTask();
  54. System.out.println("任务结束");
  55. }
  56. public void awakeTaskThread() {
  57. if (taskThreadLock.tryLock()) {
  58. //taskLock.lock();
  59. taskThreadCondition.signalAll();
  60. taskThreadLock.unlock();
  61. }
  62. }
  63. public ImportTaskAMVO getImportTaskAMVO() {
  64. return this.importTaskAMVO;
  65. }
  66. public ApplicationContext getApplicationContext() {
  67. return this.applicationContext;
  68. }
  69. ;
  70. }