Quartz usage Quartz and Spring integration integration

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/








Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325762274&siteId=291194637