quartz定时器依赖_JAVA使用quartz添加定时任务,并依赖注入对象操作
最近在寫定時任務(wù),以前沒接觸過。查了些相關(guān)資料說使用quartz定時框架。
需要配置文件:config-quartz.xml
相關(guān)配置如下(紅色部分是之后添加的,在后面步驟會說明):
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = WrhFrameScheduler
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
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
#org.quartz.jobStore.useProperties = false
#org.quartz.jobStore.dataSource = myDS
#org.quartz.jobStore.tablePrefix = QRTZ_
#org.quartz.jobStore.isClustered = false
#============================================================================
# Configure Datasources
#============================================================================
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver
#org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev
#org.quartz.dataSource.myDS.user = jhouse
#org.quartz.dataSource.myDS.password =
#org.quartz.dataSource.myDS.maxConnections = 5
最后spring-mvc.xml配置文件中獎quartz.xml文件引入即可:
然后寫測試類開始測試定時任務(wù):
package com.wy.care60.job;
import com.wy.care60.dao.MElementMapper;
import com.wy.care60.dao.MInterEnumMapper;
import com.wy.care60.dao.MProjectMapper;
import com.wy.care60.model.MInterEnum;
import com.wy.care60.model.MProject;
import org.apache.tools.ant.Project;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* Created by Administrator on 2017/12/20.
*/
@Component
public class HealthPlanJob extends QuartzJobBean {
@Autowired
MProjectMapper mProjectMapper;
@Override
public void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println(new Date());
}
}
發(fā)現(xiàn)時間可以打印出來,證明定時任務(wù)成功開啟;但是同時也發(fā)現(xiàn)了一個問題,就是依賴注入的 mProjectMapper值為null。
開始以為是Spring的原因,導(dǎo)致注解失敗,后來查了相關(guān)資料發(fā)現(xiàn),不是Spring的原因,而是因為:這個Job是由quartz實例化出來的,不受Spring的管理,所以就導(dǎo)致注入失敗。解決辦法是自己new一個類,讓Spring實例化這個類,代碼如下
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
public class MyJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
//調(diào)用父類的方法
Object jobInstance = super.createJobInstance(bundle);
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
然后把這個類配置到Spring中去,(config-quartz.xml中紅色部分)
然后在把org.springframework.scheduling.quartz.SchedulerFactoryBean的jobFactory設(shè)置成我們自己的。(config-quartz.xml中紅色部分)
config-quartz.xml完整版如下:
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
到這為止,成功!
以上這篇JAVA使用quartz添加定時任務(wù),并依賴注入對象操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
總結(jié)
以上是生活随笔為你收集整理的quartz定时器依赖_JAVA使用quartz添加定时任务,并依赖注入对象操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建行MUSE信用卡激活必须去网点吗?激活
- 下一篇: 深信服上网行为管理开启snmp_编写SH