【Java】定时任务Quartz
来源:互联网 发布:macvim python 配置 编辑:程序博客网 时间:2024/06/15 04:00
前言
Java小白一个,最近查看项目中关于定时器的源码,尝试自己配置了一下。文件参考
jar包
这是在定时器实现中使用到的jar包
- c3p0-0.9.1.1.jar
- jta.jar
- log4j-1.2.16.jar
- quartz-2.2.2.jar
- quartz-jobs-2.2.2.jar
- slf4j-api-1.7.7.jar
- slf4j-log4j12-1.7.7.jar
环境
- 1.7 JDK
- spring框架
Web.xml
首先在Web.xml中配置属性
<servlet> <servlet-name>QuartzInitializer</servlet-name> <display-name>Quartz Initializer Servlet</display-name> <servlet-class> org.quartz.ee.servlet.QuartzInitializerServlet </servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>config-file</param-name> <param-value>/quartz.properties</param-value> </init-param> <init-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>start-scheduler-on-load</param-name> <param-value>true</param-value> </init-param> </servlet>
制定quartz配置文件所在的路径
quartz.properties
在项目的src目录下配置quartz.properties文件,这里面是Quartz的配置
#=============================================================== #Configure Main Scheduler Properties #=============================================================== org.quartz.scheduler.instanceName = QuartzScheduler org.quartz.scheduler.instanceId = AUTO #=============================================================== #Configure ThreadPool #=============================================================== org.quartz.threadPool.threadCount = 20 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool #=============================================================== #Configure JobStore #=============================================================== org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore#=============================================================== #Configure Plugins #=============================================================== org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true
在下载的quartz的jar包中包含它的原始配置问价,需要修改为我们自己需要的属性。这里加了plugins的配置,quartz_jobs.xml文件将配置需要执行的定时任务。
quartz_jobs.xml
在这里配置定时任务,需要制定定时任务执行的类、执行时间等信息。
<?xml version='1.0' encoding='utf-8'?><job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd" version="1.8"> <schedule> <!-- 显示时间 --> <job> <name>ShowDateJob</name> <group>task</group> <job-class>com.swl.timer.ShowDate</job-class> </job> <trigger> <cron> <name>ShowDateCon</name> <group>task</group> <job-name>ShowDateJob</job-name> <job-group>task</job-group> <cron-expression>1 * * * * ?</cron-expression> </cron> </trigger> </schedule></job-scheduling-data>
要注意每个都与一个相关联,定义任务的名称、任务组、执行类,定义触发器触发的时间。如果需要配置多个定时任务,只需要在schedule中添加额外的与即可
执行类
import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class ShowName implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub if(arg0 != null){ System.out.println(arg0); } System.out.println("test task"); }}
每个执行类都是继承org.quartz.Job类,用户需要实现execute接口,这里面是需要执行的逻辑代码。这个接口有个参数arg0,当用户主动调用定时任务时,可以进行传参。
主动调用
@RequestMapping("/home/runjob.htm")public void runjob(HttpServletRequest request, HttpServletResponse response) throws IOException, SchedulerException{ ServletContext ctx = request.getSession().getServletContext(); StdSchedulerFactory factory = (StdSchedulerFactory) ctx.getAttribute("org.quartz.impl.StdSchedulerFactory.KEY"); Scheduler scheduler = factory.getScheduler(); JobDetail jd = JobBuilder.newJob(ShowName.class).withIdentity("shownamejob_s","temporary_task_s") .storeDurably().build();// jd.getJobDataMap().put("params", params); Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("shownamejob", "temporary_task")//.withSchedule(SimpleScheduleBuilder.simpleSchedule().withMisfireHandlingInstructionFireNow()) .startNow() .build(); scheduler.scheduleJob(jd,trigger);}
- 从Quartz1.5开始,QuartzInitializerServlet将自动储存StdSchedulerFactory实例在ServletContext里
- JobDataMap可以储存定时任务的参数,这个值可以在execute的参数中获取
- 多个任务时,任务名称不能相同,否则会报错
附加
本文只是将配置流程说明一下,具体配置内容请参考这里
阅读全文
0 0
- Java quartz 定时任务
- Java,quartz定时任务
- JAVA定时任务Quartz
- 【Java】定时任务Quartz
- java Quartz定时任务实现
- java实现定时任务(Quartz)
- Quartz-java定时任务实现
- [java]spring-Quartz定时任务
- Java Spring Quartz 定时任务
- Java定时任务之Quartz
- java定时任务Timer,Quartz
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- JAVA 定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- quartz java实现的定时任务框架
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- php身份证号码验证
- POJ 1797
- 零成本也能打造多媒体服务器?!分享资源还能这么玩!
- Ext radiogroup控件使用
- 【MongoDB】 MongoDB环境的搭建(Windows)
- 【Java】定时任务Quartz
- 点击密码的显示和隐藏
- 背包九讲学习笔记(2)
- U盘被写保护解决方案
- 欢迎使用CSDN-markdown编辑器
- HDU
- 三.线性表
- 欢迎使用CSDN-markdown编辑器
- Swap Nodes in Pairs