JAVA使用quartz添加定时任务,并依赖注入对象
来源:互联网 发布:java 1.8 下载地址 编辑:程序博客网 时间:2024/05/19 09:37
最近在写定时任务,以前没接触过。查了些相关资料说使用quartz定时框架。
需要配置文件:config-quartz.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-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"><bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="schedulerName" value="rqmis"></property><property name="applicationContextSchedulerContextKey" value="applicationContextKey" /><property name="configLocation" value="classpath:quartz.properties" /><property name="autoStartup" value="true"></property><property name="triggers"><list><bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="cronExpression" value="0 0 0 * * ?"></property><property name="jobDetail"><bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><property name="jobClass" value="com.wy.care60.job.HealthPlanJob" /></bean></property></bean></list></property></bean><!--</property></bean>--></beans>
quartz.properties
#============================================================================# Configure Main Scheduler Properties #============================================================================org.quartz.scheduler.instanceName = WrhFrameSchedulerorg.quartz.scheduler.instanceId = AUTOorg.quartz.scheduler.skipUpdateCheck = true#============================================================================# Configure ThreadPool #============================================================================org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount = 12org.quartz.threadPool.threadPriority = 5#============================================================================# Configure JobStore #============================================================================org.quartz.jobStore.misfireThreshold = 60000org.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文件引入即可:
<import resource="config-quartz.xml"></import>
然后写测试类开始测试定时任务:
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. */@Componentpublic class HealthPlanJob extends QuartzJobBean { @Autowired MProjectMapper mProjectMapper; @Override public void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println(new Date()); }}
发现时间可以打印出来,证明定时任务成功开启;但是同时也发现了一个问题,就是依赖注入的mProjectMapper值为null。
开始以为是Spring的原因,导致注解失败,后来查了相关资料发现,不是Spring的原因,而是因为:这个Job是由quartz实例化出来的,不受Spring的管理,所以就导致注入失败。解决办法是自己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 { //调用父类的方法 Object jobInstance = super.createJobInstance(bundle); capableBeanFactory.autowireBean(jobInstance); return jobInstance; }}
然后把这个类配置到Spring中去,(config-quartz.xml中红色部分)
<bean id="jobFactory" class="com.wy.care60.job.MyJobFactory"></bean>
然后在把org.springframework.scheduling.quartz.SchedulerFactoryBean的jobFactory设置成我们自己的。(config-quartz.xml中红色部分)
<bean name="MyScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 其他属性省略 --> <property name="jobFactory" ref="jobFactory"></property></bean>
config-quartz.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-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"><bean id="jobFactory" class="com.wy.care60.job.MyJobFactory"></bean><bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="schedulerName" value="rqmis"></property><property name="applicationContextSchedulerContextKey" value="applicationContextKey" /><property name="configLocation" value="classpath:quartz.properties" /><property name="autoStartup" value="true"></property><property name="jobFactory" ref="jobFactory"></property><property name="triggers"><list><bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="cronExpression" value="0 0 0 * * ?"></property><property name="jobDetail"><bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><property name="jobClass" value="com.wy.care60.job.HealthPlanJob" /></bean></property></bean></list></property></bean><!--</property></bean>--></beans>
到这为止,成功!
时间比较急,随便写写记录一下。
阅读全文
0 0
- JAVA使用quartz添加定时任务,并依赖注入对象
- 添加quartz定时任务
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- JAVA 定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- [JAVA]定时任务之-Quartz使用篇
- Java定时任务Quartz的使用
- Java使用Quartz配置定时任务
- 定时任务 quartz使用
- Java quartz 定时任务
- Java,quartz定时任务
- ansible的搭建配置
- 最全的linux命令大全,带有样例
- 华为大数据HCIE培训费用是多少
- VMware 中Redhat与Windows文件共享
- iOS 导航栏透明度 监听导航栏返回进度
- JAVA使用quartz添加定时任务,并依赖注入对象
- 2017最新Swoole扩展框架视频教程
- Maven setting.xml 配置详解
- 关于win7 api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案
- Android Butter Knife 框架——最好用的View注入
- 数据结构之查找(四)——线性索引查找
- 谷歌市场发布
- android build/core/main.mk 简单的使用方法
- Reactjs开发自制编程语言Monkey的编译器:语法解析