`
wx1569578408
  • 浏览: 71560 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

使用cronTriggerBean子类,动态设置cronExpression(quartz +...

 
阅读更多

Quartz的使用前准备:

1.引入必要的jar包:

  • quartz_all_xxx.jar 或者quartz_xxx.jar
  • slf4j_api_xx.jar quartz所需要的日志工具

quartz知识简单了解: 2.quartz的两种作业存储方式:

  • RAMJobStore,利用内存来持久化调度程序信息
  • JDBC作业存储,利用JDBC驱动和后台库中保存的调度程序信息

3.Quartz两种触发器

  • simpleTrigger 适合执行简单的调度任务
  • cronTrigger 使用cron表达式,调度相对复杂的任务

4.quartz调度器—将任务和触发器关联起来。 由scheduler接口体现,该接口主要定义了三个方法:

  • void addJob(JobDetail jobDetail, Boolean replace)
  • Date scheduleJob(JobDetail jobDetail, Trigger trigger) //使用trigger类控制该job
  • Date scheduleJob(Trigger trigger) //添加触发器调度作业

在spring中使用quartz,创建quartz作业bean的两种方法: 1.使用JobDetailBean包装QuartzBean子类的实例

  • 创建一个Quartz的作业bean,但是这个bean必须要继承QuartzJobBean抽象类,其中要实现一个executeInternal(JobExecutionContext ctx)方法。

2.使用MethodInvokingJobDetailFactoryBean配置方法(如下例Spring-action.xml 配置)

3.Spring-action.xml 配置内容:

<!-- lang: xml -->
    <!--quartz demo test start-->
    <!-- 定义要定时工作bean  并将任务工程注入 -->
    <bean id="quarzDemo" class="com.pgw.util.QuarzDemo" >
       <property name="scheduler" ref="schedulerFactory" />
    </bean>
   
    <!-- 将testQuarzt注入到job中 -->
    <bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <!-- targetObject 为要定时调用的工作bean -->
        <property name="targetObject" ref="quarzDemo" />
        <!-- targetMethod 为targetObject中要触发的方法名 -->
        <property name="targetMethod" value="doSomething" />
    </bean>
   
    <!-- 将job注入到定时触发器 -->
    <bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
       <!-- 上边定义好的job Bean注入到触发器中 -->
       <property name="jobDetail" ref="testJob" />
       <!-- cron表达式,定义要触发的时间 -->
       <property name="cronExpression"> 
           <value>0 56 10 * * ?</value>
       </property>
    </bean>
 
    <!-- 将触发器注入任务工程 -->
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false"  autowire="no">
       <property name="triggers">
           <list>
              <!-- 任务工程中要触发的触发器列表 -->
              <ref local="testTrigger" />
           </list>
       </property>
    </bean>
   
    <!-- 动态填入cron表单式的界面action bean -->
    <bean id="quartzAction" class="com.pgw.action.QuartzAction">
       <property name="quarzDemo" ref="quarzDemo"></property>
    </bean>
    <!--quartz demo test end -->
</beans>

QuarzDemo类

<!-- lang: java -->
 public class QuarzDemo{
     private Scheduler scheduler;
    
     publicvoid doSomething() {
        System.out.println("Hello World !!!");
     }
    
     publicvoid resetJob(String cronExpression){
        try {
             // 运行时可通过动态注入的scheduler得到trigger,
             // 注意采用这种注入方式在有的项目中会有问题,如果遇到注入问题,
             // 可以采取在运行方法时候,获得bean来避免错误发生。
             CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("testTrigger", Scheduler.DEFAULT_GROUP);
             String originConExpression = trigger.getCronExpression();
             // 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob
             if (!originConExpression.equalsIgnoreCase(cronExpression)) {
                trigger.setCronExpression(cronExpression);
                scheduler.rescheduleJob("testTrigger", Scheduler.DEFAULT_GROUP, trigger);
             }
                } catch (SchedulerException e) {
             e.printStackTrace();
                } catch (ParseException e) {
             e.printStackTrace();
                }
     }
  
     publicvoid setScheduler(Scheduler scheduler) {
        this.scheduler = scheduler;
     }
    
     public Scheduler getScheduler() {
        returnscheduler;
     }
 }

注意:

1.lazy-init如果设置为true,这任务工程在服务器启动时不会加载。所以这里必须设置为false。

2.由于在上边的配置中定义的了default-autowire="byName", Spring会自动注入quartz中的datasource bean,所以会报异常。 解决方法:在bean中关掉autowired

转载于:https://my.oschina.net/u/225084/blog/151988

分享到:
评论

相关推荐

    Quartz在Spring中动态设置cronExpression

    标题与描述均聚焦于“Quartz在Spring中动态设置cronExpression”的主题,这涉及到了两个主要的开源项目:Quartz,一个强大的作业调度框架;以及Spring,一个广泛使用的Java平台框架,用于构建企业级应用程序。Quartz...

    Quartz+Job+Scheduling+Framework.zip

    &lt;bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"&gt; &lt;bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt; &lt;property name="...

    quartz 随tomcat启动执行一次

    - **使用 SimpleTriggerBean**:通过配置 `startDelay` 属性来设定调度器在初始化后多久开始执行任务,同时设置 `repeatCount` 为 0 来确保任务只执行一次。 ```xml &lt;bean id="demo3" class="org.spring...

    配置Spring+quartz定时器.docx

    &lt;bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"&gt; &lt;property name="cronExpression" value="0/10 * * * * ?" /&gt; &lt;!-- 每10秒执行一次 --&gt; ``` 这里的关键在于通过`...

    Quartz+spring定时任务demo

    总结来说,"Quartz+spring定时任务demo" 提供了一个集成 Quartz 与 Spring 的实例,帮助开发者快速理解和使用这种组合来创建和管理定时任务。这不仅简化了任务的编写,还充分利用了 Spring 的优点,提高了代码的可...

    quartz-all-1.6.6.jar

    quartz-all-1.6.6.jar ...否则报错 java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class

    spring多个定时任务quartz配置.md

    &lt;bean id="cronTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerBean"&gt; &lt;property name="cronExpression"&gt; &lt;value&gt;0 0 0 * * ?&lt;/value&gt; // 每天凌晨12点执行一次 ...

    spring集成quartz集群配置

    在IT行业中,Spring框架是Java应用开发中的基石,而Quartz则是广泛使用的任务调度库,尤其适用于企业级应用。本文将深入探讨如何在Spring环境中集成Quartz以实现集群配置,以便于在分布式环境中进行高效的任务调度。...

    Spring -Quartz的配置

    在`quartz.properties`文件中,我们可以配置Quartz的详细设置,如数据库连接、线程池大小等。例如: ``` org.quartz.scheduler.instanceName = DefaultQuartzScheduler org.quartz.threadPool.class = org....

    spring mvc quartz 动态设置时间

    【Spring MVC + Quartz 动态设置时间】 在Java Web开发中,Spring MVC和Quartz库经常被用来构建灵活的任务调度系统。Quartz是一个强大的、开放源码的作业调度框架,可以用于创建、调度和执行重复任务。而Spring MVC...

    Spring中Quartz的配置实例

    在`quartz.properties`文件中,我们可以设置Quartz的详细配置,如数据库连接、线程池大小等: ``` org.quartz.scheduler.instanceName = MyScheduler org.quartz.scheduler.rmi.export = false org.quartz....

    spring设置动态定时任务.pdf

    当我们需要动态设置定时任务,即任务的执行间隔可以根据用户需求或外部条件进行调整时,Spring与Quartz的集成提供了解决方案。 1. **Quartz与Spring的集成** Spring通过`SchedulerFactoryBean`来集成Quartz,创建...

    Spring中Quartz调度器的使用

    Spring 中 Quartz 调度器的使用 Spring 中 Quartz 调度器的使用是指在 Spring 框架中使用 Quartz 调度器来实现任务调度。Quartz 是一个功能强大且灵活的开源任务调度器,能够满足复杂的任务调度需求。在 Spring 中...

    quartz在Spring中的配置

    &lt;bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"&gt; &lt;property name="cronExpression" value="0 0/5 * * * ?"/&gt; &lt;bean id="schedulerTrigger" class="org.spring...

    三个quartz官方包

    `org.quartz.CronExpression` 类用于构建符合CRON表达式的触发器。 在Quartz的1.5.2版本中,虽然相对较老,但仍然稳定且功能完备。在1.6.x版本中,Quartz引入了一些新特性,比如更完善的集群支持,性能优化,以及对...

    spring+quartz实现动态设置定时任务

    Quartz允许在运行时修改作业的调度属性,如执行频率、延迟时间等,这正是“动态设置定时任务”的核心。 **动态设置定时任务** 意味着在应用程序运行过程中,我们可以根据业务需求动态地添加、删除或修改定时任务。...

    Spring Quartz 任务调度实例

    &lt;bean id="myJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"&gt; &lt;property name="cronExpression" value="0 0/5 * * * ?"/&gt; &lt;!-- 每5分钟执行一次 --&gt; ``` 现在,当Spring容器启动...

    spring设置动态定时任务.doc

    本文将详细介绍如何在Spring中设置动态定时任务,特别关注如何动态设置`cronExpression`。 首先,我们需要了解Quartz在Spring中的基本配置。在Spring配置文件中,我们通常创建三个主要的bean: 1. `...

Global site tag (gtag.js) - Google Analytics