Quartz usage Quartz and Spring integration integration
1. Introduction to Quartz
1. Task scheduling framework written in java --- simple understanding: timer. Similar to: Timer role in java.
2. Timer: What wakes you up every day is not the 7:30 alarm clock, but a dream!
3. Quartz official website:
http://www.quartz-scheduler.org/
Second, use in java code
1 jar 包 : quartz-2.2.3.jar
2. Implementation ideas:
- Create a common java class JobDetails, implement the org.quartz.Job interface, and write the specific work content
- Create a JobDetail object and configure JobDetails
- Create a Trigger object and configure execution time-related content
- Create a Scheduler object to perform task scheduling
3. Code implementation
a. Create a common java class JobDetails
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobDetails implements Job{ @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("quartz method is running ... "); } }
b. Specific execution code
import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; public class QuartzTest { public static void main(String[] args) throws SchedulerException { //1、 创建 JobDetail 对象,并且设置选项 JobDetail jobDetail = JobBuilder.newJob(JobDetails.class).withIdentity("jobOne").build(); //2、 创建Trigger对象,并进行相关配置 TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger(); triggerBuilder.withIdentity("triggerOne"); triggerBuilder.withSchedule(SimpleScheduleBuilder.simpleSchedule(). withIntervalInMilliseconds(1000).//1000ms 执行一次 repeatForever()); // 永不停歇 Trigger trigger = triggerBuilder.build(); //3、创建Scheduler 对象,执行任务调度 SchedulerFactory schedulerFactory=new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.scheduleJob(jobDetail, trigger); //4、启动任务调度 scheduler.start(); System.out.println("over ... "); } }
三、Quartz和Spring 整合
1、jar包:
quartz-2.2.3.jar , spring-context-support-4.0.8.RELEASE.jar
2、实现思路:
- 创建一个普通的java类 JobOne,编写一个具体干活的方法
package com.quartz; public class JobOne{ public void runJob(){ System.out.println("任务开始..."); System.out.println("任务结束 end..."); } }
- spring.xml 配置文件中完成如下配置
<!-- spring quartz config begin --> <!-- 1、 config execute job class --> <bean id="jobOne" class="com.quartz.JobOne"></bean> <!-- 2、 config jobDetail --> <bean id="springJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="jobOne"></property> <property name="targetMethod" value="runJob"></property> </bean> <!-- 3、 config trigger --> <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="springJobDetail"></property> <property name="cronExpression" value="0/2 * * * * ?"></property> </bean> <!-- config schedulerFactory --> <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <array> <ref bean="trigger"/> </array> </property> <!-- 禁止随Web容器一起启动,需要手动调用 --> <property name="autoStartup" value="false"/> </bean> <!-- quartz scheduler config end -->
3、在Controller 中进行调用
a、注入 SchedulerFactoryBean
@Autowired private SchedulerFactoryBean schedulerFactoryBean;
b、启动任务调度
@RequestMapping(value={"/start"}) @ResponseBody public String start(){ try { schedulerFactoryBean.getScheduler().start(); } catch (SchedulerException e) { e.printStackTrace(); return "{\"error\":"+Exceptions.getStackTraceAsString(e)+"}"; } return "success"; }
四、关于Cron表达式
1、Cron表达式,无需过多研究,使用表达式生成器即可:
http://cron.qqe2.com/