github地址
https://github.com/dengjili/spring-quartz
添加maven的pom配置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.0.9.RELEASE</version>
</dependency>
<!-- Spring事务的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.9.RELEASE</version>
</dependency>
<!-- 定时任务框架Quartz的依赖-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
bean方式
新增一个bean,实现一些简单的逻辑
public class JobOne {
private static Logger _log = LoggerFactory.getLogger(JobOne.class);
public void runJob(){
_log.debug("任务开始...");
_log.debug("任务结束 end...");
}
}
spring配置,spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Bean头部 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!-- 1. bean对象-->
<bean id="jobOne" class="priv.dengjl.spring_quartz.job.JobOne"></bean>
<!-- 2. 关联job任务-->
<bean id="springJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="jobOne"></property>
<property name="targetMethod" value="runJob"></property>
</bean>
<!-- 3. 关联定时器-->
<bean id="trigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="springJobDetail"></property>
<property name="cronExpression" value="0/2 * * * * ?"></property>
</bean>
<!-- 4. 关联调度器-->
<bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<array>
<ref bean="trigger" />
</array>
</property>
<!-- 5.需要手动调用 -->
<property name="autoStartup" value="false" />
</bean>
</beans>
调度启动
/**
* Created by it
* Created in 2019年1月27日
* Description: bean方式
*/
public class App
{
public static void main( String[] args ) throws Exception
{
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
SchedulerFactoryBean schedulerFactory = context.getBean(SchedulerFactoryBean.class);
schedulerFactory.getScheduler().start();
}
}
测试结果
通过QuartzJobBean方式
定义一个job任务
/**
* Created by it
* Created in 2019年1月27日
* Description: QuartzJobBean是spring-context-support中的类
*/
public class EchoJob extends QuartzJobBean{
private static Logger _log = LoggerFactory.getLogger(EchoJob.class);
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
_log.info("spring-quartz例子");
_log.info("参数:{}", context.getJobDetail().getJobDataMap().getString("param"));
}
}
配置spring文件
quartz-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- For times when you need more complex processing, passing data to the scheduled job -->
<bean name="complexJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="priv.dengjl.spring_quartz.job.EchoJob" />
<property name="jobDataMap">
<map>
<entry key="param" value="测试入参" />
</map>
</property>
<property name="durability" value="true" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="complexJobDetail" />
<property name="cronExpression" value="0/2 * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
</beans>
调度入口
public class App2
{
public static void main( String[] args ) throws Exception
{
ApplicationContext context = new ClassPathXmlApplicationContext("quartz-context.xml");
/*SchedulerFactoryBean schedulerFactory = context.getBean(SchedulerFactoryBean.class);
schedulerFactory.getScheduler().start();*/
}
}
测试结果
添加quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName: TestScheduler
org.quartz.scheduler.instanceId: AUTO
org.quartz.scheduler.skipUpdateCheck: true
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 12
org.quartz.threadPool.threadPriority: 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
spring配置文件关联quartz.properties文件
quartz-context2.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- For times when you need more complex processing, passing data to the scheduled job -->
<bean name="complexJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="priv.dengjl.spring_quartz.job.EchoJob" />
<property name="jobDataMap">
<map>
<entry key="param" value="测试入参22222" />
</map>
</property>
<property name="durability" value="true" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="complexJobDetail" />
<property name="cronExpression" value="0/2 * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
<property name="configLocation" value="classpath:quartz.properties"/>
</bean>
</beans>
调度入口
public class App3
{
public static void main( String[] args ) throws Exception
{
ApplicationContext context = new ClassPathXmlApplicationContext("quartz-context2.xml");
/*SchedulerFactoryBean schedulerFactory = context.getBean(SchedulerFactoryBean.class);
schedulerFactory.getScheduler().start();*/
}
}
测试结果
整个流程完成