`
jimengjuan
  • 浏览: 14226 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

spring配置quartz定时任务

 
阅读更多

Spring3.0

一.Spring Bean 注入作业调度的两种方式

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

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

                                                               
            方式二:Spring使用MethodInvokingJobDetailFactoryBean,普通Java类都可

注:方式一保存在数据库中,方式二在内存中处理。 

方式一实现:

   quartz.properties配置文件:

#==============================================================    

#Configure Main Scheduler Properties    

#==============================================================     

org.quartz.scheduler.instanceName =myQuartz  #唯一标示

org.quartz.scheduler.instanceId = AUTO  

  

#==============================================================    

#Configure JobStore   QRTZ_ quartz表的前缀 

#==============================================================   

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX  

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate  

org.quartz.jobStore.tablePrefix = QRTZ_  

#

org.quartz.jobStore.isClustered =true

org.quartz.jobStore.clusterCheckinInterval = 20000    

org.quartz.jobStore.dataSource = myDS  

 

org.quartz.jobStore.useProperties=true 

#==============================================================    

#Configure DataSource  数据库配置信息

#==============================================================   

 

org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver  

org.quartz.dataSource.myDS.URL = jdbc:mysql://192.168.0.50:3306/acdb

org.quartz.dataSource.myDS.user = ac

org.quartz.dataSource.myDS.password =ac

 

 

 

#org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver  

#org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@127.0.0.1:1521:orcl 

#org.quartz.dataSource.myDS.user = hf  

#org.quartz.dataSource.myDS.password = hf  

 

org.quartz.dataSource.myDS.maxConnections = 30  

 

 

#==============================================================    

#Configure ThreadPool    

#==============================================================   

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  

org.quartz.threadPool.threadCount = 10  

org.quartz.threadPool.threadPriority = 5  

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

 

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" xmlns:p="http://www.springframework.org/schema/p"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

">

<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->

<bean id="acWarehouseSchedulerFactoryBean" lazy-init="false"

autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="deleteZipTrigger" />

</list>

</property>

<property name="applicationContextSchedulerContextKey" value="applicationContext" />

<property name="configLocation" value="classpath:quartz.properties" />

</bean>

 

 

<!-- 定义调用对象和调用对象的方法 -->

<bean id="deleteZipJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">

<property name="jobClass">

<value>com.xlwzsoft.acWarehouse.quartz.UpdateFromACDBClusterQuartzJobBean

</value>

</property>

<property name="jobDataAsMap">

<map>

<entry key="targetObject" value="deleteZipJob" />

<entry key="targetMethod" value="execute" />

</map>

</property>

</bean>

 

 

<!-- every hour -->

<!-- 定义触发时间 -->

<bean id="deleteZipTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail">

<ref bean="deleteZipJobDetail" />

</property>

<property name="cronExpression">

<value>59 59 * * * ?</value>

<!-- <value>0 0/3 * * * ?</value> -->

</property>

</bean>

<!-- 要调用的工作类 -->

<bean id="deleteZipJob" class="com.xlwzsoft.acWarehouse.quartz.TaskTestBean">

 

</bean>

 

</beans>

 

com.xlwzsoft.acWarehouse.quartz.UpdateFromACDBClusterQuartzJobBean类文件:

//@1步骤

public class UpdateFromACDBClusterQuartzJobBean extends QuartzJobBean {  

    protected final Log logger = LogFactory.getLog(getClass());  

    private String targetObject;  

    private String targetMethod;  

    private ApplicationContext ctx;  

  

    @Override  

    protected void executeInternal(JobExecutionContext context)  

            throws JobExecutionException {  

        try {  

       

            System.out.println("ac ---execute [" + targetObject + "] at once1111111111111>>>>>>");  

            Object otargetObject = ctx.getBean(targetObject);  

            Method m = null;  

  

            try {  

                m = otargetObject.getClass().getMethod(targetMethod, new Class[] {JobExecutionContext.class});  

                m.invoke(otargetObject, new Object[] {context});  

            } catch (SecurityException e) {  

                logger.error(e);  

            } catch (NoSuchMethodException e) {  

                logger.error(e);  

            }  

        } catch (Exception e) {  

            throw new JobExecutionException(e);  

        }  

    }  

  

    public void setApplicationContext(ApplicationContext applicationContext) {  

        this.ctx = applicationContext;  

    }  

  

    public void setTargetObject(String targetObject) {  

        this.targetObject = targetObject;  

    }  

  

    public void setTargetMethod(String targetMethod) {  

        this.targetMethod = targetMethod;  

    }  

}

TaskTestBean类文件:

//@2步骤

public class TaskTestBean implements Job ,Serializable { 

private static final long serialVersionUID = 4937479059845599009L;

    private static final Logger logger = Logger.getLogger(TaskTestBean.class);

    public TaskTestBean(){

   

    }

      

    @Override  

    public void execute(JobExecutionContext arg0) throws JobExecutionException {  

    logger.info("-----------进入自动任务------------");

   

        logger.info("-----------此次自动任务结束------------");

   

    }

 }

 

方式二:

 

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" xmlns:p="http://www.springframework.org/schema/p"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

">

 

<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 内存中处理 -->

<bean id="startQuartz" lazy-init="false" autowire="no" 

 class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 

<property name="triggers"> 

<list> 

<ref bean="deleteZipTrigger" /> 

</list> 

</property> 

</bean> 

 

<!-- 定义调用对象和调用对象的方法 内存中处理 -->

<bean id="deleteZipJobDetail2"

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<!-- 调用的类 -->

<property name="targetObject">

<ref bean="updateFromAcDataZip" />

</property>

<!-- 调用类中的方法 -->

<property name="targetMethod">

<value>work</value>

</property>

</bean>

<!-- every hour -->

<!-- 定义触发时间 -->

<bean id="deleteZipTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail">

<ref bean="deleteZipJobDetail2" />

</property>

<property name="cronExpression">

<value>59 59 * * * ?</value>

<!-- <value>0 0/3 * * * ?</value> -->

</property>

</bean>

<!-- 要调用的工作类  内存处理 -->

<bean id="updateFromAcDataZip" class="com.xlwzsoft.acWarehouse.quartz.UpdateFromAcDataZip">

</bean>

</beans>

 

UpdateFromAcDataZip类文件:

public class UpdateFromAcDataZip {

    private static final Logger logger = Logger.getLogger(TaskTestBean.class);

    public UpdateFromAcDataZip(){

   

    }

public void work(){

 

        logger.info("-----------进入自动任务- work!!!-----------");

        logger.info("-----------此次自动任务结束------------");

}

}

 

注:方式2的配置可以作为外部文件导入到applicationContext.xml中去。

测试方法二:

public static void main(String[] args)    {
        System.out.println("----------Test start.-------\n");
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-jobs.xml");
        //如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
        context.getBean("startQuartz");
  }

注:cron表达式

 

附上corn语法及示例

 

corn=[秒 分 时  日 月 周  年]

一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。 
按顺序依次为 
秒(0~59) 
分钟(0~59) 
小时(0~23) 
天(月)(0~31,但是你需要考虑你月的天数) 
月(0~11) 
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 
7.年份(1970-2099) 
其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?. 

0 0/3 * * * ? 每隔三分钟执行一次

59 59 * * * ?每小时执行一次 正好为59分59秒的时候执行
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 
0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时 
0 0 12 ? * WED 表示每个星期三中午12点 
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 

 

 

参考连接:http://www.open-open.com/lib/view/open1354666663304.html

分享到:
评论

相关推荐

    spring3配置quartz定时任务

    总结,通过以上步骤,我们就成功地在Spring 3中配置了Quartz定时任务,实现了每10秒执行一次的任务。在实际应用中,你可以根据需求定义更复杂的作业和触发器,以及使用Quartz的其他高级特性,如集群支持、持久化作业...

    spring整合quartz定时任务调度

    2. **配置Quartz**:在Spring的配置文件(如applicationContext.xml)中,声明Quartz的相关bean,包括`SchedulerFactoryBean`,它是Quartz与Spring集成的关键: ```xml &lt;bean id="schedulerFactoryBean" class="org....

    springboot整合quartz定时任务yml文件配置方式

    以下将详细介绍如何在Spring Boot应用中使用YAML文件配置Quartz定时任务,以及涉及的Spring Cloud Alibaba、Dubbo和Nacos的相关知识。 首先,我们需要在`pom.xml`中引入相关的依赖。Spring Boot的`spring-boot-...

    spring-quartz定时任务小实例

    Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用中定义和执行定时任务。本实例将探讨如何在Spring框架中集成Quartz,创建并运行一个简单的定时任务。以下是你需要知道的关键知识点: 1. **Quartz...

    spring中quartz定时任务实例及配置说明

    总结起来,Spring中的Quartz定时任务配置涉及到创建Job Bean、定义Job Detail Bean来指定执行方法,以及设置Cron Trigger Bean来控制执行时机。同时,还需要配置Quartz的属性文件来满足特定的应用需求。正确理解和...

    spring+quartz动态定时任务创建 +mybatis

    首先,我们需要在Spring配置文件中声明一个SchedulerFactoryBean,然后定义JobDetail和Trigger,分别表示任务内容和触发条件。JobDetail可以绑定到一个Spring的bean,这样每次任务执行时,Spring会自动管理bean的...

    转:spring多个定时任务quartz配置

    本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    在多应用服务器负载均衡环境下,Spring Quartz定时任务的重复执行问题是一个常见的挑战。Spring Quartz是一个强大的、开源的作业调度框架,允许开发者定义和执行复杂的定时任务。然而,当多个服务器实例并行运行时,...

    Spring 框架自带定时任务和Quartz定时任务

    在这两种方式中,Spring框架提供了自己的定时任务工具Spring Task,以及与专业定时任务框架Quartz集成的能力。 首先,对于Java自带的定时任务实现,我们可以使用java.util.Timer和java.util.TimerTask类。Timer类...

    spring quartz定时任务demo

    总的来说,“spring quartz定时任务demo”提供了一个直观的教程,帮助开发者理解如何在Spring项目中配置和使用Quartz进行定时任务的创建和管理。通过这个例子,你可以快速学习到如何定义Job,如何配置Trigger,以及...

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    2. 配置Scheduler:在Spring的配置文件中,使用`SchedulerFactoryBean`来初始化和配置Quartz Scheduler。可以设置如数据库存储、线程池大小等参数。 3. 创建Job类:定义一个实现了`org.quartz.Job`接口的类,这是...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    Spring框架结合Quartz库,提供了一种强大而灵活的方式来管理这些定时任务。本项目旨在演示如何利用Spring和Quartz从数据库中动态加载定时任务,并实现对它们的增删改查功能。以下是关于这个主题的详细知识讲解。 ...

    spring整合quartz定时任务

    Spring整合Quartz定时任务是企业级应用中常见的一种任务调度技术,它允许开发者在应用程序中设置定时执行的任务,比如数据同步、报表生成等。Quartz是一个功能强大的开源作业调度框架,而Spring则是一个广泛使用的...

    Spring Boot 配置 Quartz 定时任务(csdn)————程序.pdf

    Spring Boot 配置 Quartz 定时任务(csdn)————程序

    Spring+Quartz定时任务学习文档+实例+jar包

    Spring和Quartz是Java开发中常用的两个框架,它们在企业级应用中被广泛用于实现定时任务的管理和执行。Spring提供了一个轻量级的容器来管理Bean,而Quartz则是一个强大的作业调度库,能够帮助开发者定义和执行定时...

    spring注解Quartz定时执行功能

    在Spring配置文件(如applicationContext.xml)中添加以下配置: ```xml &lt;bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; ...

    spring多个定时任务quartz配置

    通过以上步骤,你可以在Spring中成功配置并运行多个Quartz定时任务。记得在你的应用启动时启动Scheduler,以便Quartz能够按照预定的时间表执行任务。同时,你可以通过调整JobDetail和Trigger的属性,灵活地控制任务...

    spring3 配置quartz定时任务的使用

    以上就是Spring 3.x中配置和使用Quartz定时任务的基本步骤。通过这种方式,你可以灵活地控制任务的执行频率和逻辑,从而满足各种复杂的定时需求。在实际项目中,你可能需要根据具体需求调整配置,例如添加更复杂的`...

    spring2.0 Quartz 执行每天定时任务 普通普是执行任务

    标题中的“spring2.0 Quartz 执行每天定时任务 普通普是执行任务”涉及到的是在Spring 2.0框架中使用Quartz库来创建并执行每天定时任务的场景。Quartz是一款强大的开源作业调度框架,它可以用来按计划执行各种任务,...

    Spring Quartz定时任务 jar包

    Spring Quartz定时任务jar包是Java开发中用于实现定时任务调度的一种解决方案。Quartz是一个开源的作业调度框架,它允许程序创建、调度和执行作业,而Spring框架则为Quartz提供了良好的整合,使得在Spring应用中配置...

Global site tag (gtag.js) - Google Analytics