- 浏览: 1944534 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
cht的大摩托:
学习
IBM WebSphere Performance Tool / ISA / jca457.jar / ha456.jar / ga439.jar -
leeking888:
有没有linux 64位的相关librfccm.so等包啊?
web test LoadRunner SAP / java / Java Vuser / web_set_max_html_param_len -
paladin1988:
非常不错,多谢了。。
appServer IBM WebSphere / WAS 7 / 8.5 / was commerce -
hzxlb910:
写了这么多
net TCP/IP / TIME_WAIT / tcpip / iperf / cain -
acwyg:
ed2k://|file|LoadRunner.V8.1.is ...
web test performance tools / linux performance tools / windows performance tools
quartz
http://www.opensymphony.com/quartz/
不带依赖 jar 的基于 Quartz 的示例 Java 代码
http://download.boulder.ibm.com/ibmdl/pub/software/dw/java/j-quartz-noJars.zip
带有依赖 jar 的基于 Quartz 的示例 Java 代码
http://download.boulder.ibm.com/ibmdl/pub/software/dw/java/j-quartz-withJars.zip
Quartz从入门到进阶
http://kebo.iteye.com/blog/255046
http://onjava.com/pub/a/onjava/2005/09/28/what-is-quartz.html
In This Article:
- Job Scheduling Made Easy
- The History Behind Quartz
- Getting Your Hands on Quartz
- Inside the Quartz Architecture
- Jobs, Jobs, and More Jobs
- Job Management and Storage
- Available JobStores
- Jobs and Triggers
- Scheduling a Job
- Calling Your Jobs with the Scheduler
- Programmatic vs. Declarative Scheduling
- Stateful and Stateless Jobs
- Other Features of the Quartz Framework
- What's down the Road?
- Finding Out More About Quartz
1. Quartz让任务调度简单
2. Quartz的发展史
3. 上手Quartz
4. Quartz内部架构
5. 作业
6. 作业管理和存储
7. 有效作业存储
8. 作业和触发器
9. 调度一个作业
10. 用调度器(Scheduler)调用你的作业
11. 编程调度同声明性调度
12. 有状态和无状态作业
13. Quartz框架的其他特征
14. Quartz下一步计划
15. 了解更多Quartz特征
Quartz 1.6.1发布:开源的作业调度框架
http://www.iteye.com/news/3778
Quartz
1.6.1发布。Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单
性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持
cron-like表达式等等。 Quartz基于Apache 2.0 license
.
1.6.x
版本修改了很多bug,提升了性能和增加了一些新功能,比如:新的优先调度支持;JMS集成(支持消息发送任务);Utility
类增加多个监听器:BroadcastSchedulerLister,FilterAndBroadcastJobListener等。
* Quartz主页: http://www.opensymphony.com/quartz
* 更新细节Release notes and changes: http://wiki.opensymphony.com/display/QRTZ1/Quartz+1.6.1
* 下载Download: http://www.opensymphony.com/quartz/download.action
1.6.1RC版本已经下载超过2万次,并在繁重任务集群环境中良好运行几个月。感谢社区中所有代码贡献者和测试者。
Quartz定时使用JCo同步SAP系统数据
http://www.iteye.com/topic/456909
开源任务调度框架Quartz的一份文档
http://www.iteye.com/topic/210482
用 Quartz 进行作业调度
http://www.iteye.com/topic/168164
http://www.ibm.com/developerworks/cn/java/j-quartz/#main
Quartz任务监控管理 (1)
http://www.iteye.com/topic/441951
对quartz的总结
http://www.iteye.com/topic/117244
用 Quartz 进行作业调度
http://www.ibm.com/developerworks/cn/java/j-quartz/#main
现代的 Web 应用程序框架在范围和复杂性方面都有所发展,应用程序的每个底层组件也必须相应地发展。作业调度是现代系统中对 Java 应用程序的一般要求,而且也是对 Java 开发人员一贯的要求。虽然目前的调度技术比起原始的数据库触发器标志和独立的调度器线程来说,已经发展了许多,但是作业调度仍然不是个小问题。对这个问题最合适的解决方案就是来自 OpenSymphony 的 Quartz API。 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。虽然可以通过属性文件(在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多)配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问 Web 服务器的内部函数;例如,在使用 WebSphere 应用服务器时,由 Quartz 调度的作业并不能影响服务器的动态缓存和数据源。 |
本文使用一系列代码示例介绍 Quartz API,演示它的机制,例如作业、触发器、作业仓库和属性。
要开始使用 Quartz,需要用 Quartz API 对项目进行配置。步骤如下:
- 下载 Quartz API 。
- 解压缩并把 quartz-x.x.x.jar 放在项目文件夹内,或者把文件放在项目的类路径中。
- 把 core 和/或 optional 文件夹中的 jar 文件放在项目的文件夹或项目的类路径中。
- 如果使用
JDBCJobStore
,把所有的 JDBC jar 文件放在项目的文件夹或项目的类路径中。
为了方便读者,我已经把所有必要的文件,包括 DB2 JDBC 文件,编译到一个 zip 文件中。请下载代码。
现在来看一下 Quartz API 的主要组件。
|
Quartz 调度包的两个基本单元是作业和触发器。作业 是能够调度的可执行任务,触发器 提供了对作业的调度。虽然这两个实体很容易合在一起,但在 Quartz 中将它们分离开来是有原因的,而且也很有益处。
通过把要执行的工作与它的调度分开,Quartz 允许在不丢失作业本身或作业的上下文的情况下,修改调度触发器。而且,任何单个的作业都可以有多个触发器与其关联。
通过实现 org.quartz.job
接口,可以使 Java 类变成可执行的。清单 1 提供了
Quartz 作业的一个示例。这个类用一条非常简单的输出语句覆盖了 execute(JobExecutionContext
context)
方法。这个方法可以包含我们想要执行的任何代码.
package com.ibm.developerworks.quartz; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class SimpleQuartzJob implements Job { public SimpleQuartzJob() { } public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("In SimpleQuartzJob - executing its JOB at " + new Date() + " by " + context.getTrigger().getName()); } } |
请注意,execute 方法接受一个 JobExecutionContext
对象作为参数。这个对象提供了作业实例的运行时上下文。特别地,它提供了对调度器和触发器的访问,这两者协作来启动作业以及作业的 JobDetail
对象的执行。Quartz 通过把作业的状态放在 JobDetail
对象中并让 JobDetail
构造函数启动一个作业的实例,分离了作业的执行和作业周围的状态。JobDetail
对象储存作业的侦听器、群组、数据映射、描述以及作业的其他属性。
触发器可以实现对任务执行的调度。Quartz 提供了几种不同的触发器,复杂程度各不相同。清单 2 中的 SimpleTrigger
展示了触发器的基础:
清单
2. SimpleTriggerRunner.java
public void task() throws SchedulerException { // Initiate a Schedule Factory SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // Retrieve a scheduler from schedule factory Scheduler scheduler = schedulerFactory.getScheduler(); // current time long ctime = System.currentTimeMillis(); // Initiate JobDetail with job name, job group, and executable job class JobDetail jobDetail = new JobDetail("jobDetail-s1", "jobDetailGroup-s1", SimpleQuartzJob.class); // Initiate SimpleTrigger with its name and group name SimpleTrigger simpleTrigger =new SimpleTrigger("simpleTrigger", "triggerGroup-s1"); // set its start up time simpleTrigger.setStartTime(new Date(ctime)); // set the interval, how often the job should run (10 seconds here) simpleTrigger.setRepeatInterval(10000); // set the number of execution of this job, set to 10 times. // It will run 10 time and exhaust. simpleTrigger.setRepeatCount(100); // set the ending time of this job. // We set it for 60 seconds from its startup time here // Even if we set its repeat count to 10, // this will stop its process after 6 repeats as it gets it endtime by then. //simpleTrigger.setEndTime(new Date(ctime + 60000L)); // set priority of trigger. If not set, the default is 5 //simpleTrigger.setPriority(10); // schedule a job with JobDetail and Trigger scheduler.scheduleJob(jobDetail, simpleTrigger); // start the scheduler scheduler.start(); } |
清单 2 开始时实例化一个 SchedulerFactory
,获得此调度器。就像前面讨论过的,创建 JobDetail
对象时,它的构造函数要接受一个 Job
作为参数。顾名思义,SimpleTrigger
实例相当原始。在创建对象之后,设置几个基本属性以立即调度任务,然后每 10 秒重复一次,直到作业被执行 100 次。
还有其他许多方式可以操纵 SimpleTrigger
。除了指定重复次数和重复间隔,还可以指定作业在特定日历时间执行,只需给定执行的最长时间或者优先级(稍后讨论)。执行的最长时间可以覆盖指定的重复次数,从而确保作业的运行不会超过最长时间。
CronTrigger
支持比 SimpleTrigger
更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger
支持类似日历的重复间隔,而不是单一的时间间隔 —— 这相对 SimpleTrigger
而言是一大改进。
Cron 表达式包括以下 7 个字段:
- 秒
- 分
- 小时
- 月内日期
- 月
- 周内日期
- 年(可选字段)
Cron 触发器利用一系列特殊字符,如下所示:
- 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
- 问号(?)字符和字母 L
字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母
L 字符是 last
的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
- 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
- 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
- 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
所有这些定义看起来可能有些吓人,但是只要几分钟练习之后,cron 表达式就会显得十分简单。
清单 3 显示了 CronTrigger
的一个示例。请注意 SchedulerFactory
、Scheduler
和 JobDetail
的实例化,与 SimpleTrigger
示例中的实例化是相同的。在这个示例中,只是修改了触发器。这里指定的 cron 表达式(“0/5 * * * * ?”)安排任务每 5
秒执行一次。
public void task() throws SchedulerException { // Initiate a Schedule Factory SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // Retrieve a scheduler from schedule factory Scheduler scheduler = schedulerFactory.getScheduler(); // current time long ctime = System.currentTimeMillis(); // Initiate JobDetail with job name, job group, and executable job class JobDetail jobDetail = new JobDetail("jobDetail2", "jobDetailGroup2", SimpleQuartzJob.class); // Initiate CronTrigger with its name and group name CronTrigger cronTrigger = new CronTrigger("cronTrigger", "triggerGroup2"); try { // setup CronExpression CronExpression cexp = new CronExpression("0/5 * * * * ?"); // Assign the CronExpression to CronTrigger cronTrigger.setCronExpression(cexp); } catch (Exception e) { e.printStackTrace(); } // schedule a job with JobDetail and Trigger scheduler.scheduleJob(jobDetail, cronTrigger); // start the scheduler scheduler.start(); } |
如上所示,只用作业和触发器,就能访问大量的功能。但是,Quartz 是个丰富而灵活的调度包,对于愿意研究它的人来说,它还提供了更多功能。下一节讨论 Quartz 的一些高级特性。
Quartz 提供了两种不同的方式用来把与作业和触发器有关的数据保存在内存或数据库中。第一种方式是 RAMJobStore
类的实例,这是默认设置。这个作业仓库最易使用,而且提供了最佳性能,因为所有数据都保存在内存中。这个方法的主要不足是缺乏数据的持久性。因为数据保存在
RAM 中,所以应用程序或系统崩溃时,所有信息都会丢失。
为了修正这个问题,Quartz 提供了 JDBCJobStore
。顾名思义,作业仓库通过 JDBC
把所有数据放在数据库中。数据持久性的代价就是性能降低和复杂性的提高。
在前面的示例中,已经看到了 RAMJobStore
实例的工作情况。因为它是默认的作业仓库,所以显然不需要额外设置就能使用它。但是,使用 JDBCJobStore
需要一些初始化。
在应用程序中设置使用 JDBCJobStore
需要两步:首先必须创建作业仓库使用的数据库表。 JDBCJobStore
与所有主流数据库都兼容,而且
Quartz 提供了一系列创建表的 SQL 脚本,能够简化设置过程。可以在 Quartz 发行包的
“docs/dbTables”目录中找到创建表的 SQL 脚本。第二,必须定义一些属性,如表 1 所示:
org.quartz.jobStore.class | org.quartz.impl.jdbcjobstore.JobStoreTX (or JobStoreCMT) |
org.quartz.jobStore.tablePrefix | QRTZ_ (optional, customizable) |
org.quartz.jobStore.driverDelegateClass | org.quartz.impl.jdbcjobstore.StdJDBCDelegate |
org.quartz.jobStore.dataSource | qzDS (customizable) |
org.quartz.dataSource.qzDS.driver | com.ibm.db2.jcc.DB2Driver (could be any other database driver) |
org.quartz.dataSource.qzDS.url | jdbc:db2://localhost:50000/QZ_SMPL (customizable) |
org.quartz.dataSource.qzDS.user | db2inst1 (place userid for your own db) |
org.quartz.dataSource.qzDS.password | pass4dbadmin (place your own password for user) |
org.quartz.dataSource.qzDS.maxConnections | 30 |
清单 4 展示了 JDBCJobStore
提供的数据持久性。就像在前面的示例中一样,先从初始化 SchedulerFactory
和 Scheduler
开始。然后,不再需要初始化作业和触发器,而是要获取触发器群组名称列表,之后对于每个群组名称,获取触发器名称列表。请注意,每个现有的作业都应当用 Scheduler.reschedule()
方法重新调度。仅仅重新初始化在先前的应用程序运行时终止的作业,不会正确地装载触发器的属性。
public void task() throws SchedulerException { // Initiate a Schedule Factory SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // Retrieve a scheduler from schedule factory Scheduler scheduler = schedulerFactory.getScheduler(); String[] triggerGroups; String[] triggers; triggerGroups = scheduler.getTriggerGroupNames(); for (int i = 0; i < triggerGroups.length; i++) { triggers = scheduler.getTriggerNames(triggerGroups[i]); for (int j = 0; j < triggers.length; j++) { Trigger tg = scheduler.getTrigger(triggers[j], triggerGroups[i]); if (tg instanceof SimpleTrigger && tg.getName().equals("simpleTrigger")) { ((SimpleTrigger)tg).setRepeatCount(100); // reschedule the job scheduler.rescheduleJob(triggers[j], triggerGroups[i], tg); // unschedule the job //scheduler.unscheduleJob(triggersInGroup[j], triggerGroups[i]); } } } // start the scheduler scheduler.start(); } |
在第一次运行示例时,触发器在数据库中初始化。图 1 显示了数据库在触发器初始化之后但尚未击发之前的情况。所以,基于 清单
4 中的 setRepeatCount()
方法,将 REPEAT_COUNT
设为 100,而 TIMES_TRIGGERED
是
0。在应用程序运行一段时间之后,应用程序停止。
图 1. 使用 JDBCJobStore
时数据库中的数据(运行前)
图 2 显示了数据库在应用程序停止后的情况。在这个图中,TIMES_TRIGGERED
被设为
19,表示作业运行的次数。
当再次启动应用程序时,REPEAT_COUNT
被更新。这在图 3 中很明显。在图 3 中可以看到 REPEAT_COUNT
被更新为 81,所以新的 REPEAT_COUNT
等于前面的 REPEAT_COUNT
值减去前面的 TIMES_TRIGGERED
值。而且,在图 3 中还看到新的 TIMES_TRIGGERED
值是
7,表示作业从应用程序重新启动以来,又触发了 7 次。
当再次停止应用程序之后,REPEAT_COUNT
值再次更新。如图 4
所示,应用程序已经停止,还没有重新启动。同样,REPEAT_COUNT
值更新成前一个 REPEAT_COUNT
值减去前一个 TIMES_TRIGGERED
值。
|
|
正如在使用 JDBCJobStore
时看到的,可以用许多属性来调整 Quartz 的行为。应当在 quartz.properties
文件中指定这些属性。清单 5 显示了用于 JDBCJobStore
示例的属性:
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 10 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true # Using RAMJobStore ## if using RAMJobStore, please be sure that you comment out the following ## - org.quartz.jobStore.tablePrefix, ## - org.quartz.jobStore.driverDelegateClass, ## - org.quartz.jobStore.dataSource #org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore # Using JobStoreTX ## Be sure to run the appropriate script(under docs/dbTables) first to create tables org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX # Configuring JDBCJobStore with the Table Prefix org.quartz.jobStore.tablePrefix = QRTZ_ # Using DriverDelegate org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate # Using datasource org.quartz.jobStore.dataSource = qzDS # Define the datasource to use org.quartz.dataSource.qzDS.driver = com.ibm.db2.jcc.DB2Driver org.quartz.dataSource.qzDS.URL = jdbc:db2://localhost:50000/dbname org.quartz.dataSource.qzDS.user = dbuserid org.quartz.dataSource.qzDS.password = password org.quartz.dataSource.qzDS.maxConnections = 30 |
Quartz 作业调度框架所提供的 API 在两方面都表现极佳:既全面强大,又易于使用。Quartz 可以用于简单的作业触发,也可以用于复杂的 JDBC 持久的作业存储和执行。OpenSymphony 在开放源码世界中成功地填补了一个空白,过去繁琐的作业调度现在对开发人员来说不过是小菜一碟。
连接SAP配置(LIB包在SAP LIB中)
1) SUN JDK1.5(API 运行)
WINDOWS
把librfc32.dll,sapjcorfc.dll放入WINDOWS SYSTEM32目录下
项目中引用sapjco.jar。
LINUX
把librfccm.so,libsapjcorfc.so 放入任意目录并且在.brash.rc文件中引入环境变量。项目中引用sapjco.jar。
2) IBM WEBSPHERE JDK1.5(WEB 运行)
LINUX
把librfccm.so,libsapjcorfc.so 放入IBM/WebSphere/AppServer/bin中并在.brash.rc文件中引入该目录环境变量。在IBM/WebSphere/AppServer/lib/中加入sapjco.jar。
测试环境是否成功:bash-2.05b# /export/home/oracle/midtier/jdk/jre/bin/java -jar
sapjco.jar -stdout
Quartz定时使用JCo同步SAP系统数据
http://www.iteye.com/topic/456909
一、 项目需求
业务系统需要调用 SAP 系统的财务相关功能,调用时需要提供其所需的专有参数,如公司、科目,而这些参数都将作为可选项存在,有的可能存在上千项,如某公司下有上千个费用科目,如果每次调用时都实时链接 SAP 获取这些可选项数据,将给业务系统的性能造成影响,因此需要在业务系统上保存这些数据。
二、 项目分析
提供 SAP 系统财务相关功能所需的参数多为短时间内变化量不大的数据,如:公司、科目,在时效性上没有要求,新添加了一个科目,第二天在业务系统上才有 更新可以被用户接受,因此,可以先将所需数据一次性全部保存到业务系统,然后定时同步有变化的数据。而业务系统读取这些数据时,只需要再编写 js 脚本对外提供以指定格式显示的函数即可。
三、 系统设计
数据由 SAP 系统所有,因此应该由 SAP 提供函数,定时执行,提供有变化的数据,提交到业务系统,业务系统根据 SAP 提供的数据,更新自己已经保存的数据。因此首先想到使用 WebService 方式,由业务系统提供服务,接受 XML 格式的数据,更新自己的数据。但是经测试, SAP 系统支持的 WSDL 文件规范比较低,在 SAP 系统中添加 WebService 时,业务系统提供的 WSDL 文件并不能为 SAP 系统所识别。所以,采用业务系统定时使用 Jco 链接 SAP ,执行 RFC 函数,获得有变化的数据( RFC 函数获取有变化的数据,拼成可保存为 XML 文件的字符串),更新自己的数据的方式。这里使用 Spring 的 Quartz 来作为任务调度器,定义同步数据为一个 Job ,定义每隔一定时间为一个 Trigger (定时触发)。
四、 程序编写
1. 启动程序
com/sap/jco/SpringSchedule.java
在此文件中加载 Spring 配置文件,启动应用
2. bean.xml
定义了 Quartz 任务调度器的实现类 schedule ,定义此调度器的触发器为 simpleTrigger ,在此 bean 中设置了触发器的启动时间和执行间隔,当然,也可以使用 org.springframework.scheduling.quartz.CronTriggerBean ,其可以设置具体在什么时间执行(视项目情况选取合适的 Trigger ),定义此调度器的 Job 为 methodInvokingJobDetail ,在这个 Job 中使用继承了 TimerTask 的 syncTask 中的 start 方法。
3. 真正的 Job
com/sap/jco/SyncTask.java
start() 中执行 writeService.write(readService.read());
4. 链接 SAP
com/sap/jco/util/JCOUtils.java
根据 sapBean 中配置的参数执行链接,并提供创建指定名称函数、执行指定函数对象的方法
注意:将库文件 libsapjco3.so 放在 $JAVA_HOME/jre/lib/i386 目录下
5. 获取数据
com/sap/jco/dao/impl/ReadManagerImpl.java
根据 sapbean.xml 中装配的 sapBean 链接 SAP 系统,创建函数,执行,从返回结果中获取指定名称的信息,并以名称值为 key 存储到 HashMap 中
6. 更新数据
com/sap/jco/dao/impl/WriteManagerImpl.java
从 HashMap 中根据 key 得到对应的信息,将此信息保存为 XML 文件,分别从保存原有信息和新信息的 XML 文件中得到 beanList ,然后与原有的数据做对比,如果新信息操作标示为“ D ”,则在原有信息中按照主键查找,如果存在,从原有数据中删除;如果新信息操作标示为“ U ”,则在原有信息中按照主键查找,如果存在,从原有数据中先删除记录,再添加新纪录;如果信息操作标示为“ I ”,则直接插入。操作完成后将已经有变化的信息重新写入文件。
7. js 脚本获取数据
参见 js/funcForSAPData.js
五、 系统测试
经测试,可以达到预期效果。
六、 优缺点分析
优点:
同步数据
采用与业务系统松耦合的设计,独立于业务系统运行。
显示数据
使用 js 脚本从 xml 文件中获取数据格式化显示,在业务系统需要调用数据的位置添加 js 函数即可。
缺点:
同步数据
获取到更新的数据进行同步时,在原有数据中按照主键查找时如果不做优化,当数据量比较大时可能会影响性能。
显示数据
如果业务系统中调用数据的逻辑比较复杂,可能会导致 js 脚本量大量增加,为可读性和可维护性带来困难。
http://open-open.com/14.htm
Quartz
jcrontab
1、在指定的时间表中可执行Classes/Threads/main/EJB/Methods/NativePrograms等应用。
2、提供完全按照Unix的UNIX-POSIX crontab的格式来规定时间。
3、可存储或读取由文件,数据字典,或通过数据源链接的数据库的信息。
4、可将执行结果通过电子邮件来查看
5、 非常容易的可以和Web应用服务器结合,Tomcat, Resin, Jetty and Jboss这些服务器已经通过测试和应用,这一切只需要在web.xml中添加load-on-startup直接指定Jcrontab下的 loadCrontabServlet,就可以了。
6、它的设计和部署是高性能并可扩展的。
Gos4j
Oddjob
Fulcrum Scheduler
Essiembre J2EE Scheduler
Job Scheduler
JDRing
JobServer
jBatchEngine
cron4j
end
- 任务调度框架Quartz.rar (39.3 KB)
- 下载次数: 73
- jco_sap.zip (4.8 MB)
- 下载次数: 36
- sapjco.jar (297.3 KB)
- 下载次数: 32
- jco_demo.rar (19.7 KB)
- 下载次数: 30
- jco_doc.rar (424.6 KB)
- 下载次数: 34
- jco_dll.rar (1.3 MB)
- 下载次数: 31
发表评论
-
JAVA EE BigData Apache Storm / Spark / Samza / apache storm / Flink
2016-11-23 16:38 1198sd http://storm.apache.org/ ... -
JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
2016-11-11 10:53 1337s http://sonar.oschina.net/ ... -
JAVA EE Apache Zookeeper / Google Chubby
2016-11-08 00:00 2431s http://zookeeper.apache.or ... -
framework apache commons
2009-12-14 15:24 1630http://commons.apache.org/ ... -
Java EE search_lucene xapian
2009-09-03 00:43 2435搜索引擎产品 http://www.bing.com ... -
Java EE VM Montior JMX / Hyperic HQ / OpenNMS /
2009-08-24 16:54 3479Monitoring and Managemen ... -
framework ldap
2009-08-17 12:29 1289http://www.oschina.net/project/ ... -
JAVA EE robot_ItSucks
2009-08-15 15:19 1536http://open-open.com/open223668 ... -
JAVA EE Projects_apacheFoundation
2009-07-29 09:47 1378Apache Software Foundation Di ... -
framework freemarker / velocity
2009-03-26 21:16 2549CMS 静态化参考 JAVA静态化,如何生成html ... -
JAVA_EE EJB
2009-03-25 22:02 1441E:\lindows\workspace\ejb>tre ... -
JAVA EE JSP 2.1
2009-03-07 00:22 2276JSP 2.1对JSP2.0的改动 http://mar ... -
JAVA EE JSP_JNDI
2009-02-24 12:24 1734dsfdsa http://lindows.iteye.c ... -
JAVA EE JSP_EL
2009-02-21 17:28 1588http://www.javapassion.com/j2 ... -
framework JasperReport
2008-12-06 17:16 1425JasperReport报表设计总结 ... -
framework osworkflow / jbpm
2008-12-01 20:58 3709osworkflow http://gr ... -
JAVA EE JSP_Servlet
2008-11-01 16:25 1802Servlet API htt ... -
framework junit
2008-10-29 15:30 1960http://www.appperfect.com/ A ... -
JAVA EE Projects_sourceforge
2008-10-13 14:30 4697http://www.sourceforge.net/ ... -
framework SiteMesh
2008-09-28 03:02 2611http://www.opensymphony.com/s ...
相关推荐
首先,`@Scheduled`是Spring Framework的一部分,它为Spring Boot提供了轻量级的定时任务支持。使用`@EnableScheduling`注解启动调度器,然后在方法上添加`@Scheduled`,即可实现定时任务。其优点在于简单易用,集成...
Quartz Job Scheduling Framework 是一个强大的、开源的Java作业调度框架,它允许应用程序定义和执行复杂的定时任务。这个框架的设计目标是提供一个简单且可扩展的解决方案,用于在分布式环境中调度作业。Quartz的...
Quartz的调度系统是基于Scheduler接口实现的,该接口提供了丰富的操作方法,如start()来启动调度,standby()使调度进入待机状态,以及scheduleJob()用于添加或更新作业和触发器。通过SchedulerFactory,我们可以获取...
本项目名为“schedule-job”,是基于Spring Boot框架与Quartz库构建的分布式任务调度系统,它允许开发者方便地定义、管理和执行定时任务。 【Spring Boot基础知识】 Spring Boot是由Pivotal团队提供的全新框架,其...
通过`SchedulerFactory`,你可以实例化并获取一个Scheduler对象,然后调用其`scheduleJob`方法来添加或更新Job和Trigger。 除了基本的调度功能,Quartz还提供了许多高级特性,例如: 1. 作业持久化:Quartz可以将...
本文将详细介绍两种在SpringBoot中实现定时任务的方法:Spring Schedule 和 Quartz 整合。 ### Spring Schedule 实现定时任务 Spring Schedule 是Spring框架自带的定时任务库,适合于简单的定时需求。在Spring ...
import org.springframework.scheduling.quartz.SchedulerFactoryBean; @Configuration public class QuartzConfig { @Autowired private SchedulerFactoryBean schedulerFactoryBean; public void init() { ...
<groupId>org.springframework.boot <artifactId>spring-boot-starter-quartz <groupId>org.quartz-scheduler <artifactId>quartz <version>2.3.2 ``` 接下来,配置Quartz。在`application.properties`或`...
Quartz是Java平台上的一款强大的任务调度...提供的文档《Quartz Job Scheduling Framework 中文版 V0.9.5.chm》和《Readme-说明.htm》将进一步详细解释Quartz的使用方法和配置细节,对于理解和应用Quartz非常有帮助。
Spring Framework是Java开发的基石,它提供了一个强大的Schedule模块,名为`Spring Task`。通过这个模块,开发者可以方便地定义和管理定时任务。Spring Task支持基于cron表达式的时间触发器,允许我们创建类似于...
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="configLocation" value="classpath:quartz.properties"/> <!-- 这里配置Trigger --...
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="configLocation" value="classpath:quartz.properties"/> ...
3. **Spring集成Quartz**:在Spring框架中,可以通过Spring的`org.springframework.scheduling.quartz.SchedulerFactoryBean`来配置和管理Quartz Scheduler。通过XML配置或Java配置,你可以声明Job和Trigger,Spring...
<groupId>org.springframework.boot <artifactId>spring-boot-starter-quartz ``` 接着,我们需要配置Quartz以使用数据库进行任务的持久化。这涉及到执行`resources`目录下的SQL脚本,创建必要的Quartz表结构。...
implementation 'org.springframework.boot:spring-boot-starter-quartz' ``` 接下来,我们需要创建一个Quartz作业类(Job)和作业详细信息类(JobDetail)。作业类需要继承自`org.quartz.Job`接口,并实现`execute...
Quartz Job Scheduling Framework是一个强大的、开源的作业调度框架,用于在Java应用程序中安排和执行任务。本章的翻译初稿主要聚焦于Quartz的核心概念和功能,旨在帮助开发者理解和利用这一工具进行复杂的定时任务...
可以使用`scheduler.scheduleJob(jobDetail, trigger)`方法将Job和Trigger关联起来。 7. **分布式部署**: 要实现分布式,Quartz需要配置为使用可持久化的Job存储,如数据库,这样多台服务器上的Quartz实例可以...
2. **配置Scheduler**:在Spring的配置文件中,通过`<bean>`标签定义Scheduler工厂,如`org.springframework.scheduling.quartz.SchedulerFactoryBean`。 3. **定义Job和Trigger**:创建JobDetail和Trigger Bean,...