版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhenghuasheng/article/details/51721015
1,java.util.TimerTask实现定时任务
/**
* Created by zhenghuasheng on 2016/5/9.
*/
public class Main {
public static void main(String[] args) {
Timer time = new Timer();
time.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("timer run");
}
},new Date(),2000);
}
}
2, java.util.concurrent.ScheduledExecutorService定时任务
ScheduledExecutorService executor = Executors.newScheduledThreadPool(4);
executor.scheduleWithFixedDelay(new Runnable() {
public void run() {
logger.debug("||定时扫描,创建定时任务...");
}
}, 0, 10, TimeUnit.SECONDS);
3,Spring Scheduler 定时任务
/**
* 统计与业务系统之间数据往来日志,每日上午6点执行 0 0 6 * * ?/
*/
@Scheduled(cron = "0 0 6 * * ?")
public void getDayTaskCountLog() throws ParseException {
}
spring配置文件中需开启@Scheduled注解
<!--开启这个配置,spring才能识别@Scheduled注解-->
<task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
<task:scheduler id="qbScheduler" pool-size="10"/>
4,Quartz2 定时任务
@Service
public class QuartzCommonManager {
Logger logger = LoggerFactory.getLogger(QuartzCommonManager.class);
private static Scheduler scheduler;
@PostConstruct
private void init (){
try {
scheduler = new StdSchedulerFactory().getScheduler();
logger.info("[QuartzCommonManager]init quartz scheduler successful");
} catch (SchedulerException e) {
logger.error("[QuartzCommonManager]init quartz scheduler error!errorMessage:{}", ExceptionUtil.getMessage(e));
}
}
@PreDestroy
private void destroy (){
try {
if (scheduler.isStarted()){
scheduler.shutdown(true);
logger.info("[QuartzCommonManager]shutdown quartz scheduler successful");
}
} catch (SchedulerException e) {
logger.error("[QuartzCommonManager]shutdown quartz scheduler error!errorMessage:{}", ExceptionUtil.getMessage(e));
}
}
public void createSimpleJob(String jobName, String triggerName, String jobGroupName, String triggerGroupName, Class clazz,Integer seconds){
try {
// define the job and tie it to our HelloJob class
JobDetail job = newJob(clazz)
.withIdentity(jobName, jobGroupName)
.build();
// Trigger the job to run now, and then repeat every 40 seconds
Trigger trigger = newTrigger()
.withIdentity(triggerName, triggerGroupName)
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(seconds)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(job, trigger);
if (!scheduler.isStarted()) {
scheduler.start();
}
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
定点任务
public void addJob(String jobName, String triggerName, String jobGroupName, String triggerGroupName, Class clazz, Date triggerTime, String jobId, String taskId) {
try {
/**查询job是否存在,存在将删除**/
JobKey key = new JobKey(jobName, jobGroupName);
if (scheduler.checkExists(key)){
scheduler.deleteJob(key);
}
long time = new Date().getTime();
if (triggerTime.getTime() < time) {
triggerTime = new Date((new Date().getTime() + SvspCommonConstant.job_create_offsetTime));
}
JobDetail jobDetail= newJob(clazz).withIdentity(jobName,jobGroupName).build();
Trigger trigger= newTrigger()
.withIdentity(triggerName,triggerGroupName).startAt(triggerTime).build();
jobDetail.getJobDataMap().put("taskId", taskId);
jobDetail.getJobDataMap().put("jobId", jobId);
scheduler.scheduleJob(jobDetail,trigger);
// 启动
if (!scheduler.isStarted()) {
scheduler.start();
logger.info("[QuartzCommonManager]quartz scheduler started successful");
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Quartz的定时任务需实现job接口,execute中为执行逻辑
public class ImmediateJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
}
}
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/examples/Example4.html
5,Spring+Quartz2定时任务(略,参考spring官方文档)