通用的调度框架:iquartz

gx4air 7年前

通用任务调度框架iquartz提供定时任务的定制化,能够开发出特定的任务并进行调度,如数据交换、数据处理、文件上传下载等各类任务,iquartz采用类似tomcat的class加载机制,通过自定义classloader,实现不同任务的依赖隔离,实现各个任务运行的独立和闭环。iquartz还能够对每个任务的调度执行进行监控,详细记录任务每一次的运行情况,并提供日志接口供用户使用。

1. 搭建框架的环境

1.1 iquartz + tomcat + mysql

iquartz下载:https://github.com/gx4air/iquartz/tree/master/bin

mysql脚本:https://github.com/gx4air/iquartz/tree/master/docs



 

mysql数据库新建数据库iqrtz,并将iqrtz.sql导入

 

1.2 IDE+ plugin.jar

IDE:eclipse 或idea

plugin.jar下载:https://github.com/gx4air/iquartz/tree/master/bin/client

 

2. 开发定制任务

2.1 无状态任务(参数一次性设置,任务运行中不会改变)

Java代码 
  1. package datamining.plugin;  
  2.   
  3. import java.util.Map;  
  4. import org.apache.log4j.Logger;  
  5. import com.tech.dawn.iquartz.plugin.Plugin;  
  6. import com.tech.dawn.iquartz.plugin.PluginResult;  
  7.   
  8. public class KMeansPlugin implements Plugin {  
  9.     private Logger logger = Logger.getLogger(KMeansPlugin.class);  
  10.     @Override  
  11.     public PluginResult doPlug(Map<String, String> arg0) throws Throwable {  
  12.         logger.info("从数据库查数据");  
  13.         logger.info("数据分析");  
  14.         logger.info("数据结束,返回任务结果");  
  15.           
  16.         PluginResult pr = new PluginResult();  
  17.         pr.setResulst(true);  
  18.         return pr;  
  19.           
  20.     }  
  21.   
  22. }  

 2.2 有状态任务(任务运行前设定的参数可能随着任务的不断运行而有规律的改变)

Java代码 
  1. package data.plugin;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.util.Map;  
  6. import org.apache.log4j.Logger;  
  7. import com.tech.dawn.iquartz.plugin.Plugin;  
  8. import com.tech.dawn.iquartz.plugin.PluginResult;  
  9.   
  10. public class DataMigrationPlugin implements Plugin {  
  11.       
  12.     private Logger logger = Logger.getLogger(DataMigrationPlugin.class);  
  13.   
  14.     @Override  
  15.     public PluginResult doPlug(Map<String, String> params) throws Throwable {  
  16.           
  17.         String sourceDriver = params.get("sourceDriver");  
  18.         String sourceUrl = params.get("sourceUrl");  
  19.         String sourceUser = params.get("sourceUser");  
  20.         String sourcePassword = params.get("sourcePassword");  
  21.         String rowIndex = params.get("rowIndex");  
  22.         logger.info("从数据源取数据,url-->"+sourceUrl);  
  23.         logger.info("sourceDriver-->"+sourceDriver);  
  24.         Class.forName(sourceDriver);  
  25.   
  26.         Connection conn = DriverManager.getConnection(sourceUrl, sourceUser, sourcePassword);  
  27.         logger.info("数据源connection成功:"+conn);  
  28.           
  29.           
  30.         rowIndex = (Integer.parseInt(rowIndex)+1000)+"";  
  31.           
  32.         params.put("rowIndex", rowIndex);  
  33.   
  34.         logger.info("new rowIndex:"+rowIndex);  
  35.           
  36.         logger.info("返回任务结果");  
  37.         PluginResult pr = new PluginResult();  
  38.         pr.setParams(params);  
  39.         pr.setResulst(true);  
  40.         return pr;  
  41.     }  
  42. }  

 所需依赖正常设置在classpath下



 

注意:开发的任务必须以xxxPlugin命名。

 

开发好的xxxPlugin.class通过jar命名打包成xxxPlugin.jar

注意:依赖无需打入包中。

 

3. 使用iquartz对开发好的任务进行调度

访问/iquartz/index.jsp



 

4. 对任务的定时器进行监控



 

5. 查看任务每一次的执行情况