Quartz任务调度的使用(lp)

Quartz任务调度的使用

       这边的例子是使用Quartz任务调度定时将一个数据库的表拷贝到另一个数据库。

一、配置

下载quartz相关的.jar包,放在工程下的lib文件夹下,并添加到工程中。

如果涉及到日志的输出,必须还要有日志的配置文件,也要放在工程下。如log4j.xml或者log4j.propertis,配置文件copy一个就可以了。

 

二、新建一个带main()方法的类。

如:MainClass.java

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.SchedulerMetaData;

import org.quartz.impl.StdSchedulerFactory;

 

public class MainClass {

              public void run() throws Exception {

                 

// First we must get a reference to a scheduler

               SchedulerFactory sf = new StdSchedulerFactory();

               Scheduler sched = sf.getScheduler();

               sched.start();

         

               // wait five minutes to give our jobs a chance to run

               try {

                   Thread.sleep( 900L * 1000L );

               } catch (Exception e) {

               }

 

               // shut down the scheduler

               sched.shutdown(true);

           }

 

           public static void main(String[] args) throws Exception {

                  MainClass mainClass = new MainClass();

                  mainClass.run();

           }

}

 

三、 配置quartz.propertis

         这里的org.quartz.plugin.jobInitializer.fileNames = jobs.xml标明任务的文件。

 quartz.propertis全文:

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

# Configure Main Scheduler Properties 

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

org.quartz.scheduler.instanceName = TestScheduler

org.quartz.scheduler.instanceId = AUTO

 

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

# Configure ThreadPool 

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

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

org.quartz.threadPool.threadCount = 3

org.quartz.threadPool.threadPriority = 5

 

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

# Configure JobStore 

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

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

 

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

#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

#org.quartz.jobStore.useProperties = false

#org.quartz.jobStore.dataSource = myDS

#org.quartz.jobStore.tablePrefix = QRTZ_

#org.quartz.jobStore.isClustered = false

 

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

# Configure Datasources 

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

#org.quartz.dataSource.myDS.driver = org.postgresql.Driver

#org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev

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

#org.quartz.dataSource.myDS.password =

#org.quartz.dataSource.myDS.maxConnections = 5

 

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

# Configure Plugins

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

org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin

org.quartz.plugin.jobInitializer.fileNames = jobs.xml

org.quartz.plugin.jobInitializer.overWriteExistingJobs = true

org.quartz.plugin.jobInitializer.failOnFileNotFound = true

org.quartz.plugin.jobInitializer.scanInterval = 10

org.quartz.plugin.jobInitializer.wrapInUserTransaction = false

 

四、配置jobs.xml

        解释1:<job-data-map> ....</job-data-map>是传给SimpleJob.java的各种参数,在SimpleJob.java中我们可以用jobExecutionContext.getJobDetail()

<?xml version='1.0' encoding='utf-8'?>

<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.opensymphony.com/quartz/JobSchedulingData

  http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd"

  version="1.5">

  <calendar class-name="org.quartz.impl.calendar.HolidayCalendar" replace="true">

    <name>holidayCalendar</name>

    <description>HolidayCalendar</description>

    <base-calendar class-name="org.quartz.impl.calendar.WeeklyCalendar">

      <name>weeklyCalendar</name>

      <description>WeeklyCalendar</description>

      <base-calendar class-name="org.quartz.impl.calendar.AnnualCalendar">

        <name>annualCalendar</name>

        <description>AnnualCalendar</description>

      </base-calendar>

    </base-calendar>

  </calendar>

  <job>

    <job-detail>

      <name>testJob1</name>

      <group>testJobs</group>

      <description>Test Job Number 1</description>

      <job-class>SimpleJob</job-class>

      <volatility>false</volatility>

      <durability>false</durability>

      <recover>false</recover>

      <job-data-map>

        <entry>

          <key>sourceUrl</key>

          <value>jdbc:mysql://localhost:3306/test</value>

        </entry>

              <entry>

          <key>sourceUser</key>

          <value>root</value>

        </entry>

              <entry>

          <key>sourcePassword</key>

          <value>123456</value>

        </entry>

       <entry>

          <key>targetUrl</key>

          <value>jdbc:mysql://localhost:3306/target</value>

        </entry>

              <entry>

          <key>targetUser</key>

          <value>root</value>

        </entry>

              <entry>

          <key>targetPassword</key>

          <value>123456</value>

        </entry>

              <entry>

          <key>tableName</key>

          <value>User</value>

        </entry>

      </job-data-map>

    </job-detail>

    <trigger>

      <cron>

        <name>testTrigger1</name>

        <group>testJobs</group>

        <description>Test Trigger Number 1</description>

        <job-name>testJob1</job-name>

        <job-group>testJobs</job-group>

        <cron-expression> 0 0/1 * * * ?</cron-expression>

      </cron>

    </trigger>

  </job>

</quartz>

 

五、SimpleJob.java

继承org.quartz..Job接口,自动执行execute方法。

import java.sql.*;

import java.util.ArrayList;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.*;

 

public class SimpleJob implements Job {

       public SimpleJob() {

       }

       public void execute(JobExecutionContext jobExecutionContext)

                     throws JobExecutionException {

              JobDataMap jobDataMap = jobExecutionContext.getJobDetail()

                            .getJobDataMap();

 

              String sourceUrl = jobDataMap.getString("sourceUrl");

              String sourceUser = jobDataMap.getString("sourceUser");

              String sourcePassword = jobDataMap.getString("sourcePassword");

              String targetUrl = jobDataMap.getString("targetUrl");

              String targetUser = jobDataMap.getString("targetUser");

              String targetPassword = jobDataMap.getString("targetPassword");

              String tableName = jobDataMap.getString("tableName");

              try {

                     Class.forName("org.gjt.mm.mysql.Driver").newInstance();

                     Connection connA = DriverManager.getConnection(sourceUrl,

                                   sourceUser, sourcePassword);

                     Connection connB = DriverManager.getConnection(targetUrl,

                                   targetUser, targetPassword);

 

                     ExchangeDAO.importData(tableName, connA, connB);

              //这是把表从一个数据源拷贝到另一个数据源的函数。详见下一篇的文章。

 

              } catch (Exception e) {

                     e.printStackTrace();

              }

       }

}

 

                            .getJobDataMap.getString("kye");来获取他的value值。

解释2:"Cron-Expression"由6到7个用空格分开的字段组成的表达式这6或7个字段必须遵循下面的顺序和格式:
Seconds                 0-59                             , - * /
Minutes                  0-59                             ,- * /
Hours                     0-23                             , - * /
Day-of-month         1-31                             , - * ? / L W C
Month                   1-12 or JAN-DEC         , - * /
Day-of-Week      1-7 or SUN-SAT           , - * ? / L C #
Year (Optional)     empty, 1970-2099         , - * /
*是一个通配符,表示任何值,用在Minutes字段中表示每分钟。
?只可以用在day-of-month或者Day-of-Week字段中,用来表示不指定特殊的值。
-用来表示一个范围,比如10-12用在Month中表示10到12月。
,用来表示附加的值,比如MON,WED,FRI在day-of-week字段中表示礼拜一和礼拜三和礼拜五。
/用来表示增量,比如0/15用在Minutes字段中表示从0分开始0和15和30和45分。
L只可以用在day-of-month或者Day-of-Week字段中,如果用在Day-of-month中,表示某个月的最后一天,1月则是表示31号,2月则表示28号(非闰年),如果用在Day-of-Week中表示礼拜六(数字7);但是如果L与数字组合在一起用在Day-of-month中,比如6L,则表示某个月的最后一个礼拜六;
C
W
#

0 1 0 1 1-12 ?表示每月1号0点1分执行。
0 0 21 ? * 1表示每个礼拜天 21点0分执行。
0 0 0 * * ?表示每天0点0分执行。
0 * 22 * * ?表示每天22点开始每分钟
0 * 0-23 * * ?表示每天每分钟


jobs.xml全文:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值