controller+xml配置+class
package com.zihai.controller.test;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import org.apache.log4j.Logger;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/quartz")
public class QuartzTestController {
private static Logger log = Logger.getLogger("SimpleJob");
@Autowired
private SchedulerFactoryBean bean;
@RequestMapping("/show")
public String showManager(){
return "test/quartzManager";
}
@RequestMapping("/add")
public void add(String jobname,String group,String className,String triggerName){
log.info("收到数据"+jobname+group+className+triggerName);
try {
Scheduler scheduler = bean.getScheduler();
Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(className);
JobDetail job = newJob(jobClass).withIdentity(jobname, group).storeDurably(true).build();
CronTrigger trigger = newTrigger().withIdentity(triggerName, group).withSchedule(cronSchedule("2 0/2 * * * ?")).build();
scheduler.scheduleJob(job,trigger);
// 锟斤拷锟斤拷
if (!scheduler.isShutdown()) {
scheduler.start();
}
} catch (ClassNotFoundException e) {
log.error("没找到任务类");
e.printStackTrace();
} catch (SchedulerException e) {
log.error("任务添加失败");
}
log.info("任务添加成功");
}
@RequestMapping("/delete")
public void delete(String jobname,String group,String triggerName){
log.info("收到数据"+jobname+group+triggerName);
try {
Scheduler scheduler = bean.getScheduler();
scheduler.pauseTrigger(TriggerKey.triggerKey(triggerName, group));// 停止锟斤拷锟斤拷锟斤拷
scheduler.unscheduleJob(TriggerKey.triggerKey(triggerName, group));// 锟狡筹拷锟斤拷锟斤拷锟斤拷
scheduler.deleteJob(JobKey.jobKey(jobname, group));// 删锟斤拷锟斤拷锟斤拷
// 锟斤拷锟斤拷
if (!scheduler.isShutdown()) {
scheduler.start();
}
} catch (SchedulerException e) {
log.error("失败");
}
log.info("成功");
}
}
package com.zihai.schedule;
import java.util.Date;
import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.springframework.scheduling.quartz.QuartzJobBean;
/*
* <p>
* This is just a simple job that gets fired off many times by example 1
* </p>
*
* @author Bill Kratzer
*/
public class SimpleJob extends QuartzJobBean {
private static Logger _log = Logger.getLogger("SimpleJob");
/* Quartz requires a public empty constructor so that the
scheduler can instantiate the class whenever it needs.*/
public SimpleJob() {
}
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
JobKey jobKey = context.getJobDetail().getKey();
_log.info("SimpleJob says: " + jobKey + " executing at " + new Date());
}
}
package com.zihai.schedule;
import org.quartz.spi.TriggerFiredBundle;
/*import org.quartz.spi.TriggerFiredBundle;*/
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
/**
* Autowire Quartz Jobs with Spring context dependencies
*
* @see http
* ://stackoverflow.com/questions/6990767/inject-bean-reference-into-a-quartz
* -job-in-spring/15211030#15211030
*/
public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory
implements ApplicationContextAware {
private transient AutowireCapableBeanFactory beanFactory;
public void setApplicationContext(final ApplicationContext context) {
beanFactory = context.getAutowireCapableBeanFactory();
}
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle)
throws Exception {
final Object job = super.createJobInstance(bundle);
beanFactory.autowireBean(job);
System.out.println("AutowiringSpringBeanJobFactory-------------------");
return job;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 调度任务 -->
<bean id="jobDetail"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.zihai.schedule.SimpleJob" />
<property name="durability" value="true"/>
<!-- <property name="shouldRecover" value="true" /> -->
</bean>
<!-- 调试触发器 -->
<bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression">
<value>0 0/2 * * * ?</value>
</property>
<property name="timeZone">
<value>GMT+8:00</value>
</property>
</bean>
<!-- 调度工厂 -->
<bean id="scheduler" lazy-init="false"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 注册JobDetails -->
<property name="jobDetails">
<list>
<!-- <ref bean="jobDetail"/> -->
</list>
</property>
<!-- 注册triggers -->
<property name="triggers">
<list>
<!-- <ref bean="trigger" /> -->
</list>
</property>
<property name="jobFactory">
<bean class="com.zihai.schedule.AutowiringSpringBeanJobFactory" />
</property>
<!--可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->
<property name="overwriteExistingJobs" value="true"/>
<property name="autoStartup" value="true" />
<property name="schedulerName" value="quartzScheduler" />
<!-- <property name="transactionManager" ref="transManager" /> -->
<!-- <property name="configLocation" value="classpath:quartz.properties" /> -->
<!-- 属性 -->
<property name="quartzProperties">
<props>
<!-- 集群要求必须使用持久化存储 -->
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreCMT</prop>
<prop key="org.quartz.scheduler.instanceName">EventScheduler</prop>
<!-- 每个集群节点要有独立的instanceId -->
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<!-- Configure ThreadPool -->
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">2</prop><!-- 50 -->
<prop key="org.quartz.threadPool.threadPriority">5</prop><!-- 5 -->
<prop key="org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread">true</prop>
<!-- Configure JobStore -->
<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
<prop key="org.quartz.jobStore.tablePrefix">qrtz_</prop>
<prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">10</prop>
<!-- 开启集群 -->
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.jobStore.clusterCheckinInterval">20000</prop>
<prop key="org.quartz.jobStore.dontSetAutoCommitFalse">true</prop>
<prop key="org.quartz.jobStore.txIsolationLevelSerializable">false</prop>
<prop key="org.quartz.jobStore.dataSource">myDS</prop>
<prop key="org.quartz.jobStore.nonManagedTXDataSource">myDS</prop>
<prop key="org.quartz.jobStore.useProperties">false</prop>
<!-- Configure Datasources -->
<prop key="org.quartz.dataSource.myDS.driver">${db.driver}</prop>
<prop key="org.quartz.dataSource.myDS.URL">${db.url2}</prop>
<prop key="org.quartz.dataSource.myDS.user">${db.username}</prop>
<prop key="org.quartz.dataSource.myDS.password">${db.password}</prop>
<prop key="org.quartz.dataSource.myDS.maxConnections">2</prop><!-- 10 -->
<prop key="org.quartz.dataSource.myDS.validationQuery">select 0 from dual</prop>
</props>
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
</bean>
</beans>