quartz的job类无法保留本身通过spring注入的属性问题
2011-10-06 16:50
423 查看
现在有一个应用需要定时做一些动作,使用的是quartz+spring,但是没有使用spring实现的quartz,这里发现了一个问题,就是通过spring注入进来的bean用于做为quartz的job时,无法保留该job已经通过spring注入好的属性,quartz会根据注入类完全new一个类,如下,我的job类:
任务实现类中需要一个发送消息的线程,在这里需要被注入,在spring中有该bean的配置,我在Trigger中还可以获取得到该属性senderThread,实现代码如下:
后记:
后面还是选择了spring对quartz的封装使用,使用的方式如下:
不过需要注意一点的是,spring与quartz的版本配合:
spring 2.5.5 配 quartz 1.7.x
spring 2.5.6 配 quartz 1.8.x
sprint 3.x 配 quartz 2.x
本文出自:冯立彬的博客
public class SendMsgJob implements Job { private SenderThread senderThread; @Override public void execute(JobExecutionContext paramJobExecutionContext) throws JobExecutionException { System.out.println(senderThread); } public void setSenderThread(SenderThread senderThread) { this.senderThread = senderThread; } public SenderThread getSenderThread() { return senderThread; } }
任务实现类中需要一个发送消息的线程,在这里需要被注入,在spring中有该bean的配置,我在Trigger中还可以获取得到该属性senderThread,实现代码如下:
public class SendTrigger { Logger log = LoggerFactory.getLogger(SendMsgJob.class); List<Object> jobList; public void init() throws Exception { SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); if (jobList == null) { return; } String group = "group1"; for (int i = 0; i < jobList.size(); i++) { //这里能够打出获取到属性值,说明注入成功 System.out.println(((Job) jobList.get(i)).getSenderThread()) //可是这里注册为job时候,传入的是class,quartaz在启动的时候是重新new了一个对象,因而原来已有属性值全部没了 JobDetail job = newJob(((Job) jobList.get(i)).getClass()).withIdentity("job" + i, group).build(); CronTrigger trigger = newTrigger().withIdentity("trigger" + i, group).withSchedule(cronSchedule("0 0/1 * * * ?")).build(); sched.scheduleJob(job, trigger); } // 启动定时任务 sched.start(); } public void setJobList(List<Object> jobList) { this.jobList = jobList; } }spring中的配置如下:
<!--定时器任务配置(开始)--> <bean id="trigger" class="automan.timer.job.SendTrigger" init-method="init"> <property name="jobList"> <list> <ref local="sendMsgJob"></ref> </list> </property> </bean> <!-- 定时发送的任务 --> <bean id="sendMsgJob" class="automan.timer.job.SendMsgJob"> <property name="senderThread"> <ref local="senderThread"></ref> </property> </bean> <!--定时器任务配置(结束)-->查看了它创建一个新的任务的源码,暂时还没有找到解决方案,网上搜索都是使用的spring封装好的quartz,也没有找到有人提相同的问题,是我实现上的问题,还是什么原因?再找找原因,既然spring能够实现,那我相信肯定有办法解决的。
后记:
后面还是选择了spring对quartz的封装使用,使用的方式如下:
<!--定时器任务配置(开始)--> <!--配置JOB--> <bean id="scheduledSendMsgJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="sendMsgJob" /> <property name="targetMethod" value="execute" /> </bean> <!--配置Trigger--> <bean id="sendMsgJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="scheduledSendMsgJob" /> <property name="startDelay" value="10000" /> <!-- 每1分钟执行一次 --> <property name="repeatInterval" value="60000" /> </bean> <!--配置Scheduler--> <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no"> <property name="triggers"> <list> <ref bean="sendMsgJobTrigger" /> </list> </property> <property name="autoStartup" value="true"/> </bean> <bean id="sendMsgJob" class="automan.timer.job.SendMsgJob"> <property name="senderThread"> <ref local="SenderThread"></ref> </property> </bean> <!--定时器任务配置(结束)-->
不过需要注意一点的是,spring与quartz的版本配合:
spring 2.5.5 配 quartz 1.7.x
spring 2.5.6 配 quartz 1.8.x
sprint 3.x 配 quartz 2.x
本文出自:冯立彬的博客
相关文章推荐
- 解决Spring boot使用Quartz时Job中无法注入Bean 空指针异常问题
- 单独使用Quartz 2.1.7 时Job属性Spring无法注入
- 解决Spring+Quartz无法自动注入bean问题
- Quartz的使用(解决quartz的job无法注入spring对象)
- Spring boot框架整合quartz,job类中依赖注入报空指针问题
- Spring+Hibernate+Struts2整合Quartz, JOB中无法使用Spring注入
- 解决Spring+Quartz无法自动注入bean问题
- Quartz使用问题: 如何将被Spring管理的类注入到不被Spring管理的Job类中
- Spring使用Quartz定时调度Job无法Autowired注入Service的解决方案
- 解决Spring+Quartz无法自动注入bean问题
- spring3.1集成quartz时,spring依赖注入无法注入到quartz的job中的处理方法
- 解决quartz的job无法注入spring对象
- Spring整合Quartz时,任务类中无法注入Bean的问题
- Spring使用Quartz定时调度Job无法Autowired注入Service的解决方案
- Spring4.X+Quartz2.X无法自动注入bean问题
- 解决Spring+Quartz无法自动注入bean问题
- 解决Spring+Quartz无法自动注入bean问题
- Spring+CXF 实现类无法注入属性的问题
- spring+quartz实现定时任务遇到问题总结(bean无法注入)
- Spring+Quartz 定时任务无法自动注入bean的问题