浏览代码

@IPU_FIXBUG_2021@使用spring自带的SchedulerFactoryBean实现定时任务

weihf 3 年之前
父节点
当前提交
931c7bd0ee

+ 3 - 7
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/listener/IpuCacheListener.java

@ -1,11 +1,6 @@
1 1
package com.ai.ipu.server.demo.listener;
2 2
3 3
4
import java.util.Calendar;
5
6
import org.springframework.beans.factory.annotation.Autowired;
7
import org.springframework.stereotype.Component;
8
9 4
import com.ai.ipu.basic.log.ILogger;
10 5
import com.ai.ipu.basic.log.IpuLoggerFactory;
11 6
import com.ai.ipu.common.date.TimeUtil;
@ -23,6 +18,7 @@ public class IpuCacheListener extends AbstractListener {
23 18
		try {
24 19
			log.debug(">>>>>>>>>>>>>>>>>>>new config from nacos:" + configInfo);
25 20
			IpuSpringNacosConfig config = SpringBeanUtil.getBean(IpuSpringNacosConfig.class);
21
			ScheduledTask scheduledTask = SpringBeanUtil.getBean(ScheduledTask.class);
26 22
			//新配置第二天0点0分1秒生效
27 23
			StringBuffer cron = new StringBuffer();
28 24
			cron.append("1").append(" 0").append(" 0 ");
@ -32,8 +28,8 @@ public class IpuCacheListener extends AbstractListener {
32 28
			cron.append(month.startsWith("0")?month.substring(1):month).append(" ");
33 29
			cron.append("? ");
34 30
			cron.append(TimeUtil.getSysDate(1, "yyyy"));
35
			//ScheduledTask.run("0 22 10 2 8 ? 2021", config.getIpuCacheDataid(), configInfo);
36
			ScheduledTask.run(cron.toString(), config.getIpuCacheDataid(), configInfo);
31
//			scheduledTask.addCronJob("0 05 16 12 9 ? 2021", config.getIpuCacheDataid(), configInfo);
32
			scheduledTask.addCronJob(cron.toString(), config.getIpuCacheDataid(), configInfo);
37 33
38 34
		} catch (Exception e) {
39 35
			log.error("receiveConfigInfo error:", e);

+ 4 - 4
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/schedule/ScheduleIpuCacheJob.java

@ -26,19 +26,19 @@ public class ScheduleIpuCacheJob implements Job {
26 26
						logger.debug("map:" + map);
27 27
						logger.debug("为ipu-cache添加配置成功");
28 28
					} catch (Exception e) {
29
						failed();
29
						failed(e);
30 30
					}
31 31
				}
32 32
			}).start();
33 33
34 34
		} catch (Exception e) {
35
			logger.error("为ipu-cache添加配置异常:" + e.getMessage());
35
			logger.error("为ipu-cache添加配置异常:" + e.toString(), e);
36 36
		}
37 37
38 38
	}
39 39
40
	private void failed() {
41
		logger.error("error");
40
	private void failed(Exception e) {
41
		logger.error("error " + e.toString(), e);
42 42
	}
43 43
44 44
}

+ 36 - 21
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/schedule/ScheduledTask.java

@ -1,40 +1,58 @@
1 1
package com.ai.ipu.server.demo.schedule;
2 2
3
import java.util.Map;
3 4
import java.util.concurrent.ConcurrentHashMap;
4
import java.util.concurrent.ConcurrentMap;
5 5
6 6
import org.quartz.CronScheduleBuilder;  
7 7
import org.quartz.JobBuilder;
8 8
import org.quartz.JobDataMap;
9 9
import org.quartz.JobDetail;  
10 10
import org.quartz.Scheduler;
11
import org.quartz.SchedulerException;
12
import org.quartz.SchedulerFactory;  
11
import org.quartz.SchedulerException;  
13 12
import org.quartz.Trigger;  
14 13
import org.quartz.TriggerBuilder;  
15
import org.quartz.impl.StdSchedulerFactory;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
16
import org.springframework.stereotype.Component;
17
16 18
import com.ai.ipu.basic.log.ILogger;
17 19
import com.ai.ipu.basic.log.IpuLoggerFactory;
18
  
20
21
@Component
19 22
public class ScheduledTask{  
20 23
	private static final ILogger logger = IpuLoggerFactory.createLogger(ScheduledTask.class);
21
	private static final ConcurrentMap<String, Scheduler> task = new ConcurrentHashMap<String, Scheduler>();
24
	private Map<String, Scheduler> task = new ConcurrentHashMap<String, Scheduler>();
25
	
26
	@Autowired
27
	SchedulerFactoryBean schedulerFactoryBean;
22 28
	
23
	public static void run(String cron, String dataId, String xml) 
29
	private void clearCronJob(Scheduler sched) throws SchedulerException {
30
		sched.shutdown();
31
		sched.clear();
32
	}
33
	public void addCronJob(String cron, String dataId,String xml) 
24 34
    {	  
25
        // Define scheduler  
26
        SchedulerFactory sf = new StdSchedulerFactory();  
27 35
        Scheduler sched;
28 36
		try {
29 37
			if (task.containsKey(dataId))
30 38
			{
31 39
				sched = task.get(dataId);
32
				sched.clear();
40
				clearCronJob(sched);
33 41
			}
34 42
			else
35
			{
36
				sched = sf.getScheduler();
37
				task.put(dataId, sched);
43
			{	
44
				synchronized (this) { 
45
					if (task.containsKey(dataId))
46
					{
47
						sched = task.get(dataId);
48
						clearCronJob(sched);
49
					}
50
					else
51
					{
52
						sched = schedulerFactoryBean.getScheduler();
53
						task.put(dataId, sched);
54
					}
55
				}
38 56
			}
39 57
			// Define job  
40 58
			JobDataMap newJobDataMap = new JobDataMap();
@ -49,14 +67,11 @@ public class ScheduledTask{
49 67
	                .withIdentity("trigger1", "group1")  
50 68
	                .withSchedule(CronScheduleBuilder.cronSchedule(cron))  
51 69
	                .build();  
52
	        sched.scheduleJob(job, trigger);  
53
	        
54
	        // Start the job  
55
	        sched.start();  
70
	        sched.scheduleJob(job, trigger); 
56 71
	        
72
	        sched.start();
57 73
		} catch (SchedulerException e) {
58
			logger.error(e.getMessage());
59
		}  
60
        
61
    } 
74
			logger.error(e.toString(), e);
75
		}          
76
    }
62 77
}