1、别的不多说,先下载所需要的jar包,如下图所示

java定时每天几点执行一次 java定时任务凌晨一点执行_quartz

我这里用的是quartz 2.2.3版本的,我看到网上很多的quartz教程,都是只说导入哪些jar包,但是没有给出相应的下载链接,这就很烦人,因为不同版本的jar包,可能会对应不同的代码。而且有些更气人的是,说直接导入jar包就OK了,但是后面导入之后,发现还是缺少对应包,加了好几次都不对,气死个人。还有些即使提供了jar包,也是需要用积分下载,其他我不说,但是对于一个没有收入的学生来说,真的很不友好。所以我这里直接附上了下载链接,如下。

quartz下载

点击上面下载链接,即可跳转到Quartz的下载页面,如下图所示,选中quartz 2.2.3,下载解压即可。

java定时每天几点执行一次 java定时任务凌晨一点执行_定点任务_02

2、将上述jar包导入项目后,即可开始新建任务MyJob.java

package com.example.kingqun;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
 
public class MyJob implements Job{
 
	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		System.out.println("******************MyJob is running ...****************");
	}
 
}

3、定在凌晨零点执行

package com.example.kingqun;


import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
 
public class Quartz {
 
	//秒	   分    时	每月第几天(?)   月       每周第几天(?)  (年)  
	private static final String CRON_EXPRESSION_3SECONDS = "0 0 0 * * ? ";//每天凌晨0:00:00执行一次,?用于无指定日期
	
	private static final String GROUP_NAME = "MyJob";
	
	public static void main(String[] args) {
		JobDetail jobDetail1 = JobBuilder.newJob(MyJob.class)
				.withIdentity("job1", GROUP_NAME).build();
	    Trigger trigger1 = TriggerBuilder.newTrigger()
	    		.withIdentity("trigger1", GROUP_NAME)
	    		.forJob(jobDetail1)
	    		.withSchedule(CronScheduleBuilder.cronSchedule(CRON_EXPRESSION_3SECONDS))//cron表达式
	    		.build();
	    SchedulerFactory factory = new StdSchedulerFactory();
		try {
			Scheduler scheduler = factory.getScheduler();
			scheduler.scheduleJob(jobDetail1, trigger1);
			scheduler.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

4、配置log4j,新建log4j.properties,放在src根目录下,文件内容如下。

# \u65E5\u5FD7\u8F93\u51FA\u7EA7\u522B\uFF08OFF\u3001FATAL\u3001ERROR\u3001WARN\u3001INFO\u3001DEBUG\u3001ALL\uFF09\u548C\u8F93\u51FA\u4F4D\u7F6E(stdout\u548CR)
log4j.rootCategory=DEBUG,stdout,R
#stdout \u8F93\u51FA\u5230\u63A7\u5236\u53F0
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#\u5FC5\u987B\u6307\u5B9A\u8F93\u51FA\u5E03\u5C40layout
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#paternlayout \u7684\u683C\u5F0F
log4j.appender.stdout.layout.ConversionPattern=[practice1] %p [%t] %C.%M(%L) | %m%n
 
#R \u8F93\u51FA\u5230\u6587\u4EF6
log4j.appender.R=org.apache.log4j.FileAppender
log4j.appender.R.File=f:/tmp/practice.log
log4j.appender.R.Threshold=INFO 
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern= %p [%t] %C.%M(%L) | %m%n
#[QC] %p [%t] %C.%M(%L) | %m%n
#%m \u8F93\u51FA\u4EE3\u7801\u4E2D\u6307\u5B9A\u7684\u6D88\u606F\uFF1B%M \u8F93\u51FA\u6253\u5370\u8BE5\u6761\u65E5\u5FD7\u7684\u65B9\u6CD5\u540D\uFF1B%p \u8F93\u51FA\u4F18\u5148\u7EA7\uFF0C\u5373DEBUG\uFF0CINFO\uFF0CWARN\uFF0CERROR\uFF0CFATAL\uFF1B%r \u8F93\u51FA\u81EA\u5E94\u7528\u542F\u52A8\u5230\u8F93\u51FA\u8BE5log\u4FE1\u606F\u8017\u8D39\u7684\u6BEB\u79D2\u6570\uFF1B%c \u8F93\u51FA\u6240\u5C5E\u7684\u7C7B\u76EE\uFF0C\u901A\u5E38\u5C31\u662F\u6240\u5728\u7C7B\u7684\u5168\u540D\uFF1B
#%t \u8F93\u51FA\u4EA7\u751F\u8BE5\u65E5\u5FD7\u4E8B\u4EF6\u7684\u7EBF\u7A0B\u540D\uFF1B%n \u8F93\u51FA\u4E00\u4E2A\u56DE\u8F66\u6362\u884C\u7B26\uFF0CWindows\u5E73\u53F0\u4E3A"rn\u201D\uFF0CUnix\u5E73\u53F0\u4E3A"n\u201D\uFF1B%d \u8F93\u51FA\u65E5\u5FD7\u65F6\u95F4\u70B9\u7684\u65E5\u671F\u6216\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u683C\u5F0F\u4E3AISO8601\uFF0C\u4E5F\u53EF\u4EE5\u5728\u5176\u540E\u6307\u5B9A\u683C\u5F0F\uFF0C
#\u6BD4\u5982\uFF1A%d{yyyy-MM-dd HH:mm:ss,SSS}\uFF0C\u8F93\u51FA\u7C7B\u4F3C\uFF1A2002-10-18 22:10:28,921\uFF1B%l \u8F93\u51FA\u65E5\u5FD7\u4E8B\u4EF6\u7684\u53D1\u751F\u4F4D\u7F6E\uFF0C\u53CA\u5728\u4EE3\u7801\u4E2D\u7684\u884C\u6570\uFF1B[QC]\u662Flog\u4FE1\u606F\u7684\u5F00\u5934\uFF0C\u53EF\u4EE5\u4E3A\u4EFB\u610F\u5B57\u7B26\uFF0C\u4E00\u822C\u4E3A\u9879\u76EE\u7B80\u79F0\u3002

至此,所有的布置都已完成,整个项目的结构如下图所示。

java定时每天几点执行一次 java定时任务凌晨一点执行_quartz_03

最后附上运行后的结果图。

java定时每天几点执行一次 java定时任务凌晨一点执行_定时任务_04

 

PS:至于凌晨零点(即0:00:00)的时间,有的网友可能会说,难不成要等到每天夜里凌晨零点了还要跑过来看代码跑出来的结果不成?其实不是,因为电脑系统的时间我们是可以修改的啊,我们只需要手动修改到凌晨零点之前(例如23:59:30,当然,后面的秒数我们修改不了的,只能修改小时和分钟)就ok了,见下图。

java定时每天几点执行一次 java定时任务凌晨一点执行_java定时每天几点执行一次_05

第①步首先将自动设置时间关闭,第②步点击更改按钮,即可进入手动更改时间页面,如下图。

java定时每天几点执行一次 java定时任务凌晨一点执行_quartz_06

在红色框框里面修改,修改完成之后,点击右下方的更改按钮,即可。

然后静等那么一小会,就可以看到我们的程序已经执行了!

搞完,收工!!!