Spring-通过配置向 Quartz定时任务 注入service

写了一个定时任务, 但是调用service会报空, 原因是service注入不进去, 解决办法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">   
<property name="dataSource" ref="dataSource" />

<property name="schedulerContextAsMap">
<map>
<!-- spring 管理的service需要放到这里,才能够注入成功 -->
<description>schedulerContextAsMap</description>
<entry key="webSiteService" value-ref="webSiteService"/>
<entry key = "mappingService" value-ref="mappingService"/>
<entry key="detailService" value-ref = "detailService"></entry>
</map>
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
<property name="configLocation" value="classpath:quartz.properties" />
</bean>

<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value = "com.fangjia.dc.quartz.MyQuartzJob"/>
<property name="jobDataAsMap">
<map>
<!-- 非spring管理的service放到这里,就可以注入进去 -->
<description>jobDataAsMap</description>
<!-- key 属性值,value 对应的bean -->
<entry key="uploader" value-ref="uploader" />
</map>
</property>
</bean>

// -----------------割割割-----------下面这部分我没用到------

定时任务的动态管理, 没有配置的Spring文件中
采用页面传值, 实现quartz定时任务的CRUD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public void schedule(String name, CronExpression cronExpression,String group) throws SchedulerException {  

//添加Job 给scheduler,允许 replace

jobDetail.setRequestsRecovery(true);
//孤立线程 不再保存在DB中
jobDetail.setDurability(false);
jobDetail.setName(name);
logger.info(" is durable:" + jobDetail.isDurable());
//设置replace为true,相同名字的job存在,则替换
scheduler.addJob(jobDetail, true);

CronTrigger cronTrigger = new CronTrigger(name, group, jobDetail.getName(), Scheduler.DEFAULT_GROUP);
cronTrigger.setCronExpression(cronExpression);
scheduler.scheduleJob(cronTrigger);
scheduler.rescheduleJob(cronTrigger.getName(), cronTrigger.getGroup(), cronTrigger);
}

public void pauseTrigger(String triggerName, String group) throws SchedulerException {
logger.info("pause triggerName:" + triggerName);
scheduler.pauseTrigger(triggerName, group);
}

public void resumeTrigger(String triggerName, String group) throws SchedulerException {
logger.info("resume trigger:" + triggerName + " group:" + group);
scheduler.resumeTrigger(triggerName, group);
}

public boolean removeTrigdger(String triggerName, String group) throws SchedulerException {
scheduler.pauseTrigger(triggerName, group);
return scheduler.unscheduleJob(triggerName, group);
}

quartz.properties设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
org.quartz.scheduler.instanceName = DefaultQuartzScheduler     
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

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.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.maxMisfiresToHandleAtATime=1
#org.quartz.jobStore.txIsolationLevelReadCommitted = true
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2017-2023 王丹鹏
  • Powered by Hexo Theme Ayer
  • 冀ICP备15029707号

请我喝杯咖啡吧~

支付宝
微信