日期:2014-05-19  浏览次数:20838 次

困扰好久了,spring quartz一个问题,job无法得到spring注入的属性bean,请CSDN年XDJM看一下,帮忙看一下,给分不是问题,万分感谢
本帖最后由 comeonchinagoogle 于 2012-08-10 10:53:31 编辑
事情是这样的,动态启动多个任务去发送消息,这个任务我是从数据库里获取,各个任务的启动是同一个JOB,只是每个任务JOB传入的参数不同,但这个JOB,需要一个spring 的dao,得不到spring注入的dao属性,不知道怎么回事

1.spring配置dao

--application*.xml--
<bean id="sendMsg" class="com.test.SendMsg">
     <property name="msgDao"><ref bean="msgDao"/></property>
</bean>

....msgDao已经配好数据源 spring
2.启任务
1)public calss TestInit(){
    //get tasklist
    public void initJobTrigger() throws Exception
    {
     List list=getTasklist();
     if(null!=list&&list.size()>0){
          Iterator ite=list.iterator();//这个可以得到dao 
          while(ite.hasNext()){
                 Tmsg msg=(Tmsg)ite.next();
                 JobDetail jobdetail=new JobDetail("msgJob_"+msg.getId(),Scheduler.DEFAULT_GROUP,SendMsg.class);
                 SimpleTrigger sm=new SimpleTrigger("trigger_"+msg.getId(),Scheduler.DEFAULT_GROUP,new Date(),null,SimpleTrigger.REPEAT_INDEFINITELY,60L*10000L);
               try{
                scheduler.schedulerJob(jobDetail,sm);
                }catch(Exception ex){

                }
                scheduler.unscheduleJob("InitTrigger",Scheduler.DEFAULT_GROUP);//初始化任务只执行一行,执行一次之后移除初始化触发器
                scheduler.start();
          }
     }
}

public class SendMsg implements Job
{
            private MsgDao msgDao;
            //msgDao get,set方法,略
            ...
            public void execute(JobExecutionContext je) throws JobExecutionException{

                ......略
                  List   list=msgDao.getNeedMsg()  ;//问题出在这里没法获得 msgDao

               .....do sth.          
            }
}

现在主要出现两个问题:

1.实现的job没法得到spring已经注入的dao,出现空指针<