quartz调度框架在web中应用实例

简介:

quartz调度框架在web中应用实例

1. 在web.xml中配置 初始化quartz 相关servlet


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
      <servlet>
            <servlet-name>QuartzInitializer</servlet-name>
            <display-name>Quartz Initializer Servlet</display-name>
            <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
            <init-param>
                <param-name>config-file</param-name>
                <param-value>/quartz.properties</param-value>
            </init-param>
            <init-param>
                <param-name>shutdown-on-unload</param-name>
                <param-value>true</param-value>
            </init-param>
            <init-param>
                <param-name>start-scheduler-on-load</param-name>
                <param-value>true</param-value>
            </init-param>
        </servlet> 
 
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

注意:其中配置参数为 /quartz.properties文件


2. 在 quartz.properties 中配置相关参数


如下

org.quartz.scheduler.instanceName = PushDBScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 4
org.quartz.threadPool.threadPriority = 4  
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml

注意:org.quartz.plugin.jobInitializer.fileName=quartz_job.xml


3. 在quartz_job.xml中配置调度任务相关内容

<?xml version="1.0" encoding="UTF-8"?>
<quartz xmlns="http://www.quartzscheduler.org/ns/quartz"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.quartzscheduler.org/ns/quartz http://www.quartzscheduler.org/ns/quartz/job_scheduling_data_1_1.xsd"
 version="1.1">
<job>
<job-detail>
 <name>ScanItemsInDB</name>
 <group>Scanning</group>
 <job-class>com.artron.base.task.ScanDB</job-class>
  <job-data-map allows-transient-data="true">
  <entry>
   <key>testmode</key>
   <value>true</value>
  </entry> 
  </job-data-map> 
 </job-detail>
 <trigger>
 <cron>
<name>t1</name>   
<group> Scanning </group>  
<job-name>ScanItemsInDB</job-name>  
<job-group>Scanning</job-group>                   
<cron-expression>0/3 * * * * ?</cron-expression>  
</cron>
</trigger> 
</job>

<job>
<job-detail>
 <name>Mail</name>
 <group>MailScanning</group>
 <job-class>com.artron.base.task.MailJob</job-class>
  <job-data-map allows-transient-data="true">
  <entry>
   <key>ttt</key>
   <value>true</value>
  </entry> 
  </job-data-map> 
 </job-detail>
 <trigger>
 <cron>
<name>Mailt1</name>   
<group>MailScanning</group>  
<job-name>Mail</job-name>  
<job-group>MailScanning</job-group>                   
<cron-expression>0/3 * * * * ?</cron-expression>  
</cron>
</trigger> 
</job>

</quartz>

可以配置多个任务类。重复job节点即可

4. 编写 需要调度的任务类:

这里配置了两个类:

package com.artron.base.task;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class ScanDB implements Job {

 public ScanDB() {
 }

 public void execute(JobExecutionContext context)
   throws JobExecutionException {

  System.out.println("time:" + System.currentTimeMillis());

 }

}

 

package com.artron.base.task;

import java.util.Hashtable;
import java.util.Vector;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import com.artron.base.db.DBBean;
import com.artron.base.log.LogException;
import com.artron.base.log.LogWriter;

public class MailJob implements Job {

 public MailJob() {
 }

 public void execute(JobExecutionContext context)
   throws JobExecutionException {
  
  System.out.println("time:"+System.currentTimeMillis());
  DBBean dbbean=new DBBean();
  
  String select_sql="select id from  t_yh where state=0 and rownum<20";

  try {
   Vector ids=dbbean.execute(select_sql);

   for (int i=0;i<ids.size();i++)
   {
    Hashtable h=(Hashtable)ids.elementAt(i);
    String id=(String)h.get("ID");
    String sql="update t_yh set state=1 where id="+id;
    dbbean.executeSql(sql);
    System.out.println("处理内容id:"+id);
   }
   
   if (ids.size()==0)
   {
    System.out.println("暂无任务内容");
   }
   
  } catch (Exception e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }

 }
}


注意:lib包括quartz-1.6.6.jar ,common相关包,jta.jar包等。


然后启动tomcat就可以看到执行效果了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 


<?xml version='1.0' encoding='utf-8'?>
<quartz xmlns="http://www.quartzscheduler.org/ns/quartz"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.quartzscheduler.org/ns/quartz http://www.quartzscheduler.org/ns/quartz/job_scheduling_data_1_1.xsd"
 version="1.1">
 <job>
  <job-detail>
   <name>CollectJob</name>
   <group>CollectJobs</group>
   <job-class>com.xxx.CollectJob</job-class>
   <volatility>false</volatility>
   <durability>false</durability>
   <recover>false</recover>
  </job-detail>
  <trigger>
   <simple>
    <name>CollectTrigger</name>
    <group>DEFAULT</group>
    <job-name>CollectJob</job-name>
    <job-group>DEFAULT</job-group>
    <start-time>2008-11-30T10:00:00 AM</start-time>
    <!-- repeat indefinitely every day -->
    <repeat-count>-1</repeat-count>
    <repeat-interval>7200000</repeat-interval>
   </simple>
  </trigger>
 </job>
</quartz>

 

 

 

 

目录
相关文章
|
7月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
2月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
355 2
|
6月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
6月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
6月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
6月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
180 1
|
7月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
242 7
|
8月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
939 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
10月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
295 19
|
11月前
|
Web App开发 编解码 vr&ar
使用Web浏览器访问UE应用的最佳实践
在3D/XR应用开发中,尤其是基于UE(虚幻引擎)开发的高精度场景,传统终端因硬件局限难以流畅运行高帧率、复杂效果的三维应用。实时云渲染技术,将渲染任务转移至云端服务器,降低终端硬件要求,确保用户获得流畅体验。具备弹性扩展、优化传输协议、跨平台支持和安全性等优势,适用于多种终端和场景,特别集成像素流送技术,帮助UE开发者实现低代码上云操作,简化部署流程,保留UE引擎的强大开发能力,确保画面精美且终端轻量化。
460 17
使用Web浏览器访问UE应用的最佳实践

热门文章

最新文章