spring+quartz

这两天研究了一下spring和quartz结合,下面具体的说一下:

首先是spring中的配置:

   <!-- 这句话关联我要执行的方法所在的类 -->
  <bean id="executeMethod" class="cc.qma.Method" />
  <!-- 定义目标bean和bean中的方法 -->
  <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="executeMethod" />
<!-- 这里的value是所要执行的方法 -->
    <property name="targetMethod" value="produce" />
  </bean>
  <!-- ======================== 调度触发器 ======================== -->
  <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<!-- 触发器中的属性,第一个是时间间隔,是用毫秒表示的,这个必须要写,否则默认是0,会弹出错误 -->
   <property name="repeatInterval" value="2000" />
    <property name="jobDetail" ref="jobDetail" />
  </bean>
  <!-- ======================== 调度工厂 ======================== -->
<!--针对这句话lazy-init="true",默认是false,程序加载时自动加载-->
  <bean id="startQuertz" lazy-init="true" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!--属性autoStartup,是判断程序加载后是否立即执行,默认是true-->
    <property name="autoStartup" value="false" />
    <property name="triggers">
      <list>
        <ref bean="simpleTrigger" />
      </list>
    </property>
  </bean>
</beans>
public void produce(){
//这里的我spring控制的程序,具体要执行什么,自己写
}

针对spring,我现在默认只加载,不执行,因为我要从前天获取值,然后修改我的执行间隔和执行次数等属性,所以我还要有一个和前台页面关联的bean,在这个bean中,来开启produce方法,暂定这个bean类的名字是FormBean具体例子如下:
public void FormBean(){
//通过WebApplicationContext实例化为context获取spring中的bean
......
//下面可以进行一些设置
simpleTriggerBean.setRepeatInterval(repInterval);
try {
//在开始执行之前一定要执行的方法
      scheduler.rescheduleJob(triggerName, groupName, newTrigger);
//开始执行
      scheduler.start();
    }
    catch (Exception e) {
      e.printStackTrace();
    }

}

另外,scheduler.pauseTrigger(triggerName, groupName);这句话是暂停执行,不要用,scheduler.shutdown,因为这句话是全部停止,并且不能够再次开始,除非你重启服务器

另外:

1、SPring Bean注入作业的两种方式:

           方式一:@1、Spring使用JobDetailBean类,继承QuartzJobBean,重写
                       protected void executeInternal(JobExecutionContext context)方法

                       @2、  或实现Job接口,在execute方法中调用执行任务
                                                              

            方式二:Spring使用MethodInvokingJobDetailFactoryBean,普通Java类都可(这个是我上面写的方法)

2、 Spring把Trigger分为SimpleTrigger和CronTrigger,上面是用前者定义执行的时间间隔和执行次数的,如果用后者,则可以做如下定义(每隔5秒执行一次)
cronTriggerBean.setCronExpression("0/5 * * * * ?");

你可能感兴趣的:(spring,quartz,JSF)