java中定时任务Job的使用总结

Job的原理,参考:
http://www.cnblogs.com/Dorae/p/9357180.html

job的使用,参考:
https://blog.csdn.net/u010996565/article/details/78591054
https://blog.csdn.net/hfut_wowo/article/details/64434664

实例,创建一个job,每天凌晨3点执行:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.annotation.Resource;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class SumFinancialJob implements Job
{

	public SumFinancialJob()
	{
	}

	public void execute(JobExecutionContext context) throws JobExecutionException
	{
		//得到一个Calendar实例
		Calendar calendar = Calendar.getInstance();
		//calendar的日期设为今天
		calendar.setTime(new Date());
		//设置calendar为昨天
		calendar.add(Calendar.DATE, -1);
		//calendar.add(Calendar.YEAR, -1);//前一年
		//calendar.add(Calendar.MONTH, -1);//前一月

		Date yesterday = calendar.getTime();

		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		//前一天的字符串
		String pre = simpleDateFormat.format(yesterday);
		//前一天凌晨0点的字符串
		String startTime = pre.substring(0, 10) + " 00:00:00";
		//前一天午夜24点的字符串
		String endTime = pre.substring(0, 10) + " 24:00:00";

		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		//获取前一天的日期字符串
		String preDate = dateFormat.format(yesterday);

		//获取外部传来的参数
		//JobDataMap map = context.getJobDetail().getJobDataMap();
		//String ywbDate = map.getString("ywbDate");
		进行操作……
	}

	public static void schedulerJob()
	{
		try
		{
			// 创建一个jobDetail的实例 quartz 2.xx版本
			JobDetail jobDetail = JobBuilder.newJob(SumFinancialJob.class).withIdentity("train-financial-Job").build();
			// 创建一个Trigger触发器的实例,每天凌晨3点运行
			CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("train-financial-Trigger").startNow().withSchedule(CronScheduleBuilder.cronSchedule("0 0 3 * * ?")).build();
			// 创建schedule实例
			Scheduler scheduler = new StdSchedulerFactory().getScheduler();
			// 添加一个job
			scheduler.scheduleJob(jobDetail, trigger);
			// 开启一个job
			scheduler.start();
		}
		catch (Exception e)
		{
			System.err.println("创建定时任务失败" + e);
		}
	}
}

job的使用实例参考:

(https://blog.csdn.net/u010996565/article/details/78591054 )

package com.qua.test;
 
import java.util.Date;
 
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
 
import com.qua.job.PlanJob;
 
public class Test {
	public static void main(String[] args) throws Exception {
		//创建job
		JobDetail detail=new JobDetail("myJob", "myGroup", PlanJob.class);
		//向程序内部传入参数
		JobDataMap map=detail.getJobDataMap();
		map.put("username", "张三");
		//这里的触犯器是规定的时间间隔内做的事,不是很常用
//		//创建触发器
//		SimpleTrigger trigger=new SimpleTrigger("myTrigger",SimpleTrigger.REPEAT_INDEFINITELY, 3000);
//		//设置开始执行时间
//		trigger.setStartTime(new Date(System.currentTimeMillis()+1000));
		//下面这个是在指定时间做的事,在日常开发中是比较常用的
		//指定时间
		CronTrigger trigger=new CronTrigger("myCron", "myGroup", "40 10 11 * * ?");//这里有三个参数(1.触发器的名称2.触发器的组3.时间表达式)
		
		//创建调度工厂
		SchedulerFactory factory=new StdSchedulerFactory();
		//创建调度器
		Scheduler scheduler=factory.getScheduler();
		
		//绑定job 和触发器
		scheduler.scheduleJob(detail, trigger);
		//启动
		scheduler.start();
//		//停止定时任务
//		scheduler.shutdown();
	}
}


Cron表示式示例

(https://blog.csdn.net/zzq900503/article/details/38020573/)

"0 0 12 * * ? "

每天12点运行

“0 15 10 ? * *”

每天10:15运行

“0 15 10 * * ?”

每天10:15运行

“0 15 10 * * ? *”

每天10:15运行

“0 15 10 * * ? 2008”

在2008年的每天10:15运行

“0 * 14 * * ?”

每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59。

“0 0/5 14 * * ?”

每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55。

“0 0/5 14,18 * * ?”

每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。

“0 0-5 14 * * ?”

每天14:00点到14:05,每分钟运行一次。

“0 10,44 14 ? 3 WED”

3月每周三的14:10分到14:44,每分钟运行一次。

“0 15 10 ? * MON-FRI”

每周一,二,三,四,五的10:15分运行。

“0 15 10 15 * ?”

每月15日10:15分运行。

“0 15 10 L * ?”

每月最后一天10:15分运行。

“0 15 10 ? * 6L”

每月最后一个星期五10:15分运行。

“0 15 10 ? * 6L 2007-2009”

在2007,2008,2009年每个月的最后一个星期五的10:15分运行。

“0 15 10 ? * 6#3”

每月第三个星期五的10:15分运行。

你可能感兴趣的:(Spring架构,java基础)