在应用程序加载时,如何在Spring中作为线程运行类方法?

时间:2011-05-18 01:16:16

标签: spring quartz-scheduler

我需要从quartz-schedualer运行一个类,我需要它从主应用程序始终和并行运行。该类将始终检查要处理的文件夹中的新文件。我想把它作为一个监听器包含在web.xml中,但是这样构造函数不能运行,只加载了calss。任何sugestions?

这是我在web.xml中添加的内容:

<listener>
        <listener-class>com.bamboo.common.util.QuartzSchedualer</listener-class>
</listener>

这是我宣布课程的方式:

public class QuartzSchedualer {

     public void QuartzSchedualer (){
                try{

                    // Grab the Scheduler instance from the Factory

                    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();


                    // and start it off

                    scheduler.start();


                    scheduler.shutdown();

                }  catch (SchedulerException se) {
            se.printStackTrace();
        }
     }

}

提前谢谢!

1 个答案:

答案 0 :(得分:2)

您不需要将它包含在web.xml中,只需在您的web.xml中加载appcontext,就像您已经做的那样,并在spring中处理调度:

引用具有要调用的方法的业务对象的作业:

<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="exampleBusinessObject" />
  <property name="targetMethod" value="doIt" />
  <property name="concurrent" value="false" />
</bean>

负责触发方法的触发器:

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail" ref="exampleJob" />
  <!-- run every morning at 6 AM -->
  <property name="cronExpression" value="0 0 6 * * ?" />
</bean>

schedulerFactoryBean用于连接触发器:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
    <list>
      <ref bean="cronTrigger" />
    </list>
  </property>
</bean>

请参阅Spring documentation中的2.5,here获取3.0。