NutzCN Logo
问答 quartz定时任务 数据库state字段一改 就开始定时
发布于 2419天前 作者 qq_648413d1 1813 次浏览 复制 上一个帖子 下一个帖子
标签:

id state
1 1
2 3
3 1
4 2
5 1
数据库state改为2或3时 定时任务开始 30天后2或3就改为4
定时任务开始时 state的1还会修改为2或3 还要继续这个任务
我现在只做出每个月一号 把state数据2或3数据改为4
求大佬帮忙

6 回复

看不懂,路过

每次state更改2或3时 都会有个定时30任务启动

只是项目之前写的定时任务 固定时间执行
我想要是数据库字段改变就开始执行30天任务

public class UserRecQuartz implements ServletContextListener{
	 
	public void contextDestroyed(ServletContextEvent arg0) {
		
	}

	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("-------------------------启动任务调度开始");
		try {
			/*** 定制每日9:00执行方法 ***/
			Calendar calendar = Calendar.getInstance();
			calendar.set(Calendar.HOUR_OF_DAY,17);
			calendar.set(Calendar.MINUTE,50);
			calendar.set(Calendar.SECOND, 0);
			//Date date = calendar.getTime();					 
			//第一次执行定时任务的时间 比当前时间推迟xxx的时间
			Date date = new Date(System.currentTimeMillis()+(long)(60*1000));//1分钟后执行
			
			String time1 = "0 1/60 * * * ? *"; //1小时执行一次
			JobDetail jobDetail1 = new JobDetail("job1_1","jGroup1", RyHistoryJob.class);
			CronTrigger cron1 = new CronTrigger("trigger1_1","tgroup1", time1);
			cron1.setStartTime(date);
			
			SchedulerFactory schedulerFactory = new StdSchedulerFactory();
			Scheduler scheduler = schedulerFactory.getScheduler();
			// 注册并进行调度  
			scheduler.scheduleJob(jobDetail1,cron1);

		//调度启动
		scheduler.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Timer定时器的缺点
1.管理并发任务:Timer里有且只有一个线程去执行定时任务,如果存在多个任务且任务时间过长,会导致执行效果与预期不符,无法并发。
2.任务抛出异常:如果TimerTask抛出RuntimeException异常,Timer会停止所有的任务。
不建议使用Timer的情况
1.对时效性较高的多任务并发作业。
2.对复杂的任务的调度。

添加回复
请先登陆
回到顶部