`
xly1981
  • 浏览: 146589 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Quartz实现定时的DEMO,可修改定时策略

阅读更多
来源于网络 http://www.blogjava.net/xiaodaoxiaodao/articles/103437.html
给出完整的类和配置文件,除了一般是Spring 包外,另外需要下一个包spring-context-1.15.jar包,可在http://repo1.maven.org/maven2/ 找。
下面的内容拼到一个webProject里面,发布起来就可以看到效果。

1.Action
public class ScheduleInfoAction {
public void reScheduleJob() throws SchedulerException, ParseException {   
        // 运行时可通过动态注入的scheduler得到trigger   
        CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(   
                 "cronTrigger", Scheduler.DEFAULT_GROUP);   
        String dbCronExpression = getCronExpressionFromDB();   
        String originConExpression = trigger.getCronExpression();       
        // 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等   
        // 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob   
        if(!originConExpression.equalsIgnoreCase(dbCronExpression)){   
            trigger.setCronExpression(dbCronExpression);   //执行更新操作
            scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger);   
        }        
    // 下面是具体的job内容,可自行设置   
     executeJobDetail();   
}
private String getCronExpressionFromDB(){   
        String sql="from ScheduleInfo scheduleInfo where 1=1 ";   
        sql=sql+" and scheduleInfo.infoId = '"+"1" + "'";   
        List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql);   
        ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0);   
        String dbCronExpression = scheduleInfo.getCronExpression();   
        return dbCronExpression;   
}   
private void executeJobDetail(){
System.out.println("schedule action time:"+System.currentTimeMillis());
}
private Scheduler scheduler;     
    // 设值注入,通过setter方法传入被调用者的实例scheduler     
public void setScheduler(Scheduler scheduler) {   
        this.scheduler = scheduler;   
     }     
private ScheduleInfoManager scheduleInfoManager;     
    // 设值注入,通过setter方法传入被调用者的实例scheduleInfoManager   
public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){   
        this.scheduleInfoManager = scheduleInfoManager;   
    }   
}
2.Bean
public class ScheduleInfo {
String cronExpression="0/10 * * * * ?";
public void setCronExpression(String cronExpression) {
this.cronExpression = cronExpression;
}
public String getCronExpression(){
return this.cronExpression ;
}
}

3.Service
public class ScheduleInfoManager {
long i =System.currentTimeMillis();
int j=0;
List lis=new ArrayList();
ScheduleInfo s=new ScheduleInfo();

public List queryScheduleInListBySql(String sql){
if(System.currentTimeMillis()-i<30*1000 ){

}else if(j==0){
j++;
s.setCronExpression("0 * * * * ?");
System.out.println("30秒到,更新参数:0 * * * * ?");
}
lis.add(s);
return lis;
}
}

4.Init
public class InitializingCronTrigger extends CronTriggerBean implements Serializable {
    private ScheduleInfoManager scheduleInfoManager;
    // 设值注入,通过setter方法传入被调用者的实例scheduleInfoManager
    public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){
        this.scheduleInfoManager = scheduleInfoManager;
        // 因为在getCronExpressionFromDB使用到了scheduleInfoManager,所以
        // 必须上一行代码设置scheduleInfoManager后进行getCronExpressionFromDB
        String cronExpression = getCronExpressionFromDB ();   // ①
        // 因为extendsCronTriggerBean ,此处调用父类方法初始化cronExpression
        try {
setCronExpression (cronExpression);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}                    // ②
}
    private String getCronExpressionFromDB(){
        String sql="from ScheduleInfo scheduleInfo where 1=1 ";
        sql=sql+" and scheduleInfo.infoId = '"+"1" + "'";
        List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql);
        ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0);
        String dbCronExpression = scheduleInfo.getCronExpression();
        System.out.println("inital:"+dbCronExpression);
        return dbCronExpression;
}

5.applicationcontext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="scheduleInfoManager" class="com.huateng.quartz.ScheduleInfoManager">
    </bean>
   
<bean id="scheduleInfoAction" class="com.huateng.quartz.ScheduleInfoAction">
<property name="scheduler" ref="schedulerFactory"/>
        <property name="scheduleInfoManager" ref="scheduleInfoManager"/>
    </bean>

    <bean id="schedulerJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="scheduleInfoAction"/>
        <property name="targetMethod" value="reScheduleJob"/>
        <property name="concurrent" value="false"/>
    </bean>

     <bean id="cronTrigger" class="com.huateng.trigger.InitializingCronTrigger">
         <property name="jobDetail" ref="schedulerJobDetail"/>
         <!--<property name="cronExpression">
             <value>0/10 * * * * ?</value>
         </property>-->
         <property name="scheduleInfoManager" ref="scheduleInfoManager"/>
     </bean>

    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref local="cronTrigger"/>
            </list>
        </property>
</bean>
</beans>
分享到:
评论

相关推荐

    Quartz.net-定时任务 Demo

    这个"Quartz.net-定时任务 Demo"示例将展示如何利用Quartz.NET来安排代码在指定时间后执行,比如几十分钟后的场景。 Quartz.NET的核心概念包括Job(工作)、Trigger(触发器)和Scheduler(调度器)。Job是你要执行...

    spring quartz定时任务demo

    本文将详细解析“spring quartz定时任务demo”这个项目,它提供了实现Java定时任务的实例,便于快速理解和应用。 首先,Quartz是一个开源的作业调度框架,支持复杂的调度策略,可以创建、调度和执行重复或一次性...

    基于SSM+quartz的定时任务管理demo

    总结,本Demo旨在通过SSM+Quartz的组合,提供一个可扩展的定时任务管理平台,开发者可以根据实际需求,调整任务逻辑和调度策略,以满足各种业务场景。同时,通过学习这个Demo,开发者可以深入理解Java定时任务的实现...

    quartz定时服务demo

    在本“quartz定时服务demo”中,我们将深入探讨如何配置和使用Quartz来实现定时服务。 首先,让我们了解Quartz的基本概念。Quartz的核心组件包括Scheduler、Job和Trigger。Scheduler是调度器,负责管理和执行Job。...

    quartz定时任务Demo,直接可运行

    这个"quartz定时任务Demo"是一个可以直接在Eclipse集成开发环境中运行的实例,它提供了清晰的注释,方便初学者理解和学习。 1. **Quartz基本概念** - **Job**:作业是实际执行的任务,是实现了`org.quartz.Job`...

    quartz 实现按天、按周、按月定时任务的简单demo

    在这个“quartz 实现按天、按周、按月定时任务的简单demo”中,我们将探讨如何使用 Quartz 在 Java 环境下设置按天、按周和按月的定时任务。 首先,我们需要引入 Quartz 的依赖库到项目中。通常,这可以通过 Maven ...

    quartz.net 定时任务demo

    .net 4.5项目基于quartz.net 和 Topshelf 可以安装到系统里的定时任务demo 一、项目 JobService 是针对安装到系统项目的,一般不用编写代码,只编辑其中的 App.config(数据链接、日志目录) 、quartz_jobs.xml(需要...

    Quartz+spring定时任务demo

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

    C# Quartz.Net定时任务操作明细、完整过程

    【C# Quartz.Net定时任务操作】Quartz.Net是一款强大的任务调度框架,广泛应用于C#环境下的定时任务管理。本文将详细介绍如何使用Quartz.Net进行定时任务的配置与执行。 首先,**通过Nuget安装框架**非常简单,只需...

    quartz完整版demo

    通过修改这些配置,你可以调整任务的执行策略。 2. **作业类(Job)**:这是实现具体任务的地方。你需要创建一个实现了`org.quartz.Job`接口的类,并重写`execute(JobExecutionContext context)`方法。在这个方法中...

    Quartz.net Topshelf Demo

    9. **持久化策略**:Quartz.NET 支持多种作业和触发器的持久化策略,如 SQL Server、SQLite、MySql 等,以确保在服务重启后能恢复之前的状态。 通过这个示例项目,开发者可以学习如何将 Quartz.NET 的强大调度能力...

    spring quartz通过xml配置实现定时任务demo

    通过上述步骤,你就成功地在Spring中使用XML配置实现了Quartz定时任务。这种方式使得任务的定义、触发策略和调度管理都集中在一个配置文件中,方便管理和扩展。在实际开发中,可以根据需求调整CRON表达式,或者添加...

    spring整合quartz动态定时任务demo-spring-quartz-demo.zip

    这个"spring-quartz-demo"项目就是一个很好的示例,它展示了如何在Spring中整合Quartz以实现动态定时任务。 首先,我们要了解Spring和Quartz的基本概念。Spring是一个全面的Java企业级应用开发框架,它提供了依赖...

    quartz定时任务

    在“quartz定时任务”这个主题中,我们将深入探讨Quartz的核心特性、如何配置和使用它,以及如何实现集群。 1. **Quartz的核心特性** - **灵活的调度**:Quartz支持多种调度模式,如简单触发器、cron触发器和Nth...

    spring quartz实现触发器demo(笔记)

    总结来说,Spring与Quartz的集成使得我们可以轻松地在Java应用中实现复杂的定时任务调度。通过配置Spring的`SchedulerFactoryBean`,定义`Job`和`Trigger`,并利用Spring的依赖注入机制,我们可以创建出灵活且易于...

    使用quartz实现不重启服务器修改自定义配置的示例

    这个示例就是关于如何在不重启服务器的情况下,利用Quartz实现自定义配置的更改。 首先,我们需要了解Quartz的基本概念: 1. **Job**:是实际执行的任务,实现了`org.quartz.Job`接口。 2. **Trigger**:定义了任务...

    springboot jpa quartz动态定时任务

    springboot jpa quartz 动态定时任务,任务增加,任务删除,任务修改demo,非常简单

    springboot集成Quartz实现定时任务demo源码案例演示

    一、简介 二、工程搭建 1、工程结构 2、依赖管理 3、数据库 ...三、Quartz用法 1、初始化加载 2、新增任务 3、更新任务 4、暂停任务 5、恢复任务 6、执行一次 7、删除任务 8、任务执行 四、参考源码

    一个简单的quartz定时器的demo

    总的来说,这个demo提供了Quartz基础用法的一个快速入门,帮助开发者理解如何在实际项目中利用Quartz实现定时任务。通过深入学习和实践,你可以掌握更复杂的调度策略,如并发控制、任务依赖关系以及异常处理等,从而...

Global site tag (gtag.js) - Google Analytics