问题描述
- java有关一个动态定时任务的需求求助
- 每天都要在某个时间执行一个任务 这个时间是 动态的 从数据库取的
比如今天是要在22点45分15秒执行一个任务 明天的这个时间是 23点45分11秒 以此类推 每天都会有一个动态的时间任务
请问这个怎么用java实现 貌似quartz实现不了
解决方案
用java的定时器可以实现,但是需要用两个定时器。一个每日执行,一个每秒执行。
实例代码:Task是最终的任务;SheduledTask接收任务时间,每隔一秒匹配一下当前时间,如果匹配就执行Task;
还有一个日定时器,可以设置每天0点执行,从数据库获取当日的任务时间,启用秒定时器。
public class Task implements Runnable{ @Override public void run() { System.out.println(""do task.""); }}
秒定时器:
import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * 定时器:接收一个时间,然后每隔开一秒比对是否是任务执行时间,如果是则执行任务 * @author bh */public class SheduledTask implements Runnable{ private Task task; //需要执行的任务 private String time;//任务执行的时间 //定时器每隔一秒执行run方法 private ScheduledExecutorService service = Executors.newScheduledThreadPool(2); public SheduledTask(Task taskString time){ this.task = task; this.time = time; } @Override public void run() { //判断当前时间是否为执行时间,如果是则执行任务,结束后关闭定时器 System.out.println(""每秒钟定时任务:比对任务时间,如果匹配则执行任务...""); String now = nowAsString(); if(now.equals(time)){ this.task.run(); service.shutdown(); } } public void execute(){ service.scheduleAtFixedRate(this 0 1 TimeUnit.SECONDS); } private String nowAsString() { SimpleDateFormat df = new SimpleDateFormat(""yyyy-MM-dd HH:mm:ss"");// 设置日期格式 return df.format(new Date()).toString(); }}
日定时器:
import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * @author bh */public class DailyTask implements Runnable{ @Override public void run() { //定时生成一个任务时间 System.out.println(""每日定时任务...""); //此次时间从数据库获取 String time = ""2015-04-23 15:01:30""; Task task = new Task(); new SheduledTask(tasktime).execute(); } public static void main(String[] args) { ScheduledExecutorService service = Executors.newScheduledThreadPool(2); DailyTask dailyTask= new DailyTask(); //每天凌晨执行当日定时任务 service.scheduleAtFixedRate(dailyTask 0 1 TimeUnit.DAYS); }}
解决方案二:
用Quartz,这个框架专门帮你干这个的,具体google下
时间: 2024-12-11 07:04:04