企业定时任务调度器Quartz,定时查询数据库(这里还需要继续做研究)

简介:    看到楼下各位兄弟的批评指正后,确实对我很有启发,任务如果都以配置的形式出现,在项目中是很利于维护的,所以,稍作修改,呵呵。  首先要做QuartzJob定时任务类了,这个类要实现的是Job接口,然后重写execute方法,方法中就是执行你具体要做的事情了。不过首先需要一个配置文件,里面定义了一些参数,是Quartz的一些配置。配置文件如下  Java代码  
   看到楼下各位兄弟的批评指正后,确实对我很有启发,任务如果都以配置的形式出现,在项目中是很利于维护的,所以,稍作修改,呵呵。 

首先要做QuartzJob定时任务类了,这个类要实现的是Job接口,然后重写execute方法,方法中就是执行你具体要做的事情了。不过首先需要一个配置文件,里面定义了一些参数,是Quartz的一些配置。配置文件如下 
Java代码    收藏代码
  1. #============================================================================  
  2. # Configure Main Scheduler Properties    
  3. #============================================================================  
  4. org.quartz.scheduler.instanceName = QuartzScheduler  
  5. org.quartz.scheduler.instanceId = AUTO  
  6.   
  7. #============================================================================  
  8. # Configure ThreadPool    
  9. #============================================================================  
  10. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  
  11. org.quartz.threadPool.threadCount = 3  
  12. org.quartz.threadPool.threadPriority = 5  
  13.   
  14. #===============================================================  
  15. #Configure JobStore  
  16. #===============================================================  
  17. org.quartz.jobStore.misfireThreshold = 60000  
  18. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore  
  19.   
  20. #============================================================================  
  21. # Configure Plugins   
  22. #============================================================================  
  23. #org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin  
  24. org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin  
  25. org.quartz.plugin.jobInitializer.fileName = conf/quartz_jobs.xml  
  26. org.quartz.plugin.jobInitializer.overWriteExistingJobs = true  
  27. org.quartz.plugin.jobInitializer.failOnFileNotFound = true  
  28. org.quartz.plugin.jobInitializer.scanInterval = 60  


即使做成配置,这个类也必须要有,一定会有个Job类,专门做数据分析,有的朋友说配置文件搞定所有,不现实,  
好了,这就是配置文件,接下来我们就要做这个计划类了,这个类执行的是去源数据库中查询数据,并插入目标数据库中,并且不允许有重复。代码如下  

Java代码    收藏代码
  1. package com.bj58.job.servlet;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7.   
  8. import org.apache.commons.logging.Log;  
  9. import org.apache.commons.logging.LogFactory;  
  10. import org.quartz.Job;  
  11. import org.quartz.JobExecutionContext;  
  12. import org.quartz.JobExecutionException;  
  13.   
  14. import com.bj58.job.utils.ConnectionFactory_DB_dest;  
  15. import com.bj58.job.utils.ConnectionFactory_DB_src;  
  16.   
  17. /** 
  18.  * 定时任务类 
  19.  * @author zhangwan@58.com 
  20.  * Jun 8, 2010 
  21.  * 
  22.  */  
  23. public class QuartzJob implements Job {  
  24.     private static final Log log = LogFactory.getLog(Job.class);  
  25.     private static final String findSql_src = "select PortalId from t_portalinfo";  
  26.     private static final String findSql_dest = "select userId from t_user";  
  27.     private static final String insertSql_dest = "insert into t_user(userId) values (?)";  
  28.       
  29.     /** 
  30.      * 执行任务方法 
  31.      */  
  32.     @Override  
  33.     public void execute(JobExecutionContext context) throws JobExecutionException {  
  34.         Connection conn_db_src = ConnectionFactory_DB_src.getConnection();  
  35.         Connection conn_db_dest = ConnectionFactory_DB_dest.getConnection();  
  36.         PreparedStatement pstmt_src = null;  
  37.         PreparedStatement pstmt_dest = null;  
  38.         ResultSet rs_src = null;  
  39.         ResultSet rs_dest = null;  
  40.         try {  
  41.             pstmt_src = conn_db_src.prepareStatement(findSql_src);  
  42.             rs_src = pstmt_src.executeQuery();  
  43.   
  44.             pstmt_dest = conn_db_dest.prepareStatement(findSql_dest);  
  45.             rs_dest = pstmt_dest.executeQuery();  
  46.             pstmt_dest = conn_db_dest.prepareStatement(insertSql_dest);  
  47.               
  48.             while(rs_dest.next()) { //第二次或第n次入库,第一次入库的话rs_dest没有结果,所以此段操作都不执行  
  49.                 String userId = rs_dest.getString(1);  
  50.                 while (rs_src.next()) {  
  51.                     String protalId = rs_src.getString(1);  
  52.                     if(userId.equals(protalId)) { //如果两个结果相同,则不进行入库  
  53.                         break;  
  54.                     } else {  
  55.                         pstmt_dest.setString(1, protalId);  
  56.                         pstmt_dest.execute();  
  57.                     }  
  58.                 }  
  59.             }  
  60.               
  61.             while (rs_src.next()) { //如果是第一次入库  
  62.                 String protalId = rs_src.getString(1);  
  63.                 pstmt_dest.setString(1, protalId);  
  64.                 pstmt_dest.execute();  
  65.                   
  66.             }  
  67.             log.info("存储数据...");  
  68.         } catch (SQLException e) {  
  69.             log.info("存储数据出现异常...");  
  70.             e.printStackTrace();  
  71.         } finally {  
  72.             ConnectionFactory_DB_dest.free(rs_dest, pstmt_dest, conn_db_dest);  
  73.             ConnectionFactory_DB_src.free(rs_src, pstmt_src, conn_db_src);  
  74.             log.info("数据库连接已经关闭...");  
  75.         }  
  76.   
  77.     }  
  78. }  

这里一次性查出了源数据库中所有字段,因为源数据库表中的数据最多不会超过10000条,我在做测试的时候,在本机上发现一次查询10W条也不会出现结果集溢出情况,所以这里就忽略这个问题了。  

然后需要这么个配置文件quartz_jobs.xml,内容如下  
Java代码    收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <quartz>  
  3.     <job>  
  4.         <job-detail>  
  5.             <name>PortalInfoJob</name>  
  6.             <group>PortalInfo</group>  
  7.             <job-class>com.bj58.portalcrm.web.job.PortalInfoJob</job-class>  
  8.         </job-detail>  
  9.         <trigger>  
  10.             <cron>  
  11.                 <name>PORTALINFO</name>  
  12.                 <job-name>PortalInfoJob</job-name>  
  13.                 <job-group>PortalInfo</job-group>  
  14.                 <cron-expression>0 0 1 * * ?</cron-expression>  
  15.             </cron>  
  16.         </trigger>  
  17.     </job>  
  18. </quartz>  


ok,最后就是web.xml文件配置一下,Quartz提供了个初始化的Servlet,呵呵,内容如下  
Java代码    收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.       
  8.     <welcome-file-list>  
  9.         <welcome-file>index.jsp</welcome-file>  
  10.     </welcome-file-list>  
  11.     
  12.     <!-- Quartz配置计划 -->  
  13.     <servlet>     
  14.          <servlet-name>QuartzInitializer</servlet-name>     
  15.          <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>     
  16.          <load-on-startup>1</load-on-startup>     
  17.          <init-param>     
  18.              <param-name>config-file</param-name>     
  19.              <param-value>/quartz.properties</param-value>     
  20.          </init-param>     
  21.          <init-param>     
  22.              <param-name>shutdown-on-unload</param-name>     
  23.              <param-value>true</param-value>     
  24.          </init-param>     
  25.     </servlet>  
  26. </web-app>  

这样就搞定了,
目录
相关文章
|
5天前
|
SQL 数据挖掘 关系型数据库
阿里云百炼|析言GBI全新发布:联合云上数据库,助力企业轻松实现ChatBI
析言GBI是阿里云推出的一款基于AI的智能数据分析产品,通过自然语言处理实现对话式数据分析。用户无需编写代码,即可轻松进行数据查询、分析和可视化。该产品支持多种数据库连接方式(如MySQL、PostgreSQL等),并提供多版本选择以适应不同业务需求。即将发布的动态规划BI分析功能将进一步提升复杂问题的拆解与综合分析能力。欢迎访问阿里云百炼应用广场体验析言GBI,并享受200次免费问题额度。
|
26天前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
1月前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
29 6
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
147 3
|
2月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
66 3
|
1月前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
33 0
|
2月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
43 2
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
372 1
|
15天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3

热门文章

最新文章