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分运行。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您想要编写一个使用Java编写的定时任务。您可以使用Java的Quartz框架来实现这个功能。以下是一些示例代码,演示如何编写一个简单的任务,并使用Quartz框架来定期执行该任务。 首先,您需要添加Quartz库的依赖项到您的项目。您可以在Maven或Gradle添加以下依赖项: Maven: ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` Gradle: ```groovy compile 'org.quartz-scheduler:quartz:2.3.2' ``` 现在,您可以编写一个实现Job接口的类,如下所示: ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class MyJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { // 这里是您要执行的任务 System.out.println("Hello, World!"); } } ``` 在上面的示例,我们定义了一个名为MyJob的类,实现了Quartz的Job接口。 Job接口只有一个方法,即execute()方法。在我们的示例,我们简单地打印了一条消息。 现在,创建一个Scheduler并Schedule job ```java import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; public class Main { public static void main(String[] args) throws SchedulerException { // 创建一个SchedulerFactory SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 从SchedulerFactory创建一个Scheduler实例 Scheduler scheduler = schedulerFactory.getScheduler(); // 创建一个JobDetail实例,指定任务 JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1") .build(); // 创建一个Trigger实例,定义该任务触发的时间间隔 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(30) .repeatForever()) .build(); // 将任务和Trigger放入scheduler scheduler.scheduleJob(jobDetail, trigger); // 启动该scheduler scheduler.start(); } } ``` 在上面的代码,我们创建了一个Scheduler实例,并利用StdSchedulerFactory的getScheduler()方法实现了Scheduler实例, 接着,我们通过JobBuilder创建了一个JobDetail实例,定义了任务任务。JobDetail定义一个或多个实例化的任务。 接下来,我们创建了一个Trigger实例,定义了该任务触发的时间间隔。在我们的示例,任务将每30秒重复执行,而不断重复。 最后,我们将创建的JobDetail和Trigger添加到Scheduler,然后启动Scheduler。 这些就是简单的定时任务的实现方式,如果需要更复杂的定时任务可以通过Quartz API来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43751710

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值