SSH框架中使用定时器

SSH框架中使用定时器


SSH框架中使用定时器比较Nutz来说要简单明了,不要去写CronTrigger和Schedule了;使用有两种方式(本篇文章具体介绍一种方式足以)。

1. 在web.xml中配置监听quartz:

[html]  view plain  copy
  1. <listener>   
  2.        <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>   
  3. </listener>  

2.添加quartz_jobs.xml文件,并在该配置文件中增加job节点信息:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="gb2312"?>  
  2. <quartz>  
  3. <job>  
  4.     <id>1</id>  
  5.     <description>定时发送短信每半小时(每30分钟的第一分钟)发送一次</description>  
  6.     <job-detail>  
  7.         <name>J1</name>  
  8.         <group>DEFAULT</group>  
  9.         <job-class>com.xxxx.tiles.sms.task.TimerSendJob</job-class>  
  10.     </job-detail>  
  11.     <trigger>  
  12.         <cron>  
  13.             <name>T1</name>  
  14.             <group>DEFAULT</group>  
  15.             <job-name>J1</job-name>  
  16.             <job-group>DEFAULT</job-group>  
  17.             <cron-expression>0 1/30 * * * ?</cron-expression>  
  18.         </cron>  
  19.     </trigger>  
  20. </job>  
  21. <job>  
  22.     <id>2</id>  
  23.     <description>每天23点数据对账</description>  
  24.     <job-detail>  
  25.         <name>J2</name>  
  26.         <group>DEFAULT</group>  
  27.         <job-class>com.xxxx.xxxx.xxxx.factory.DataChecking</job-class>  
  28.     </job-detail>  
  29.     <trigger>  
  30.         <cron>  
  31.             <name>T2</name>  
  32.             <group>DEFAULT</group>  
  33.             <job-name>J2</job-name>  
  34.             <job-group>DEFAULT</job-group>  
  35.             <cron-expression>0 35 13 ? * *</cron-expression>  
  36.         </cron>  
  37.     </trigger>  
  38. </job>  
  39. <job>  
  40.     <id>3</id>  
  41.     <description>每天12点完成心跳包的操作,作用:监控服务是否正常运行.</description>  
  42.     <job-detail>  
  43.         <name>J3</name>  
  44.         <group>DEFAULT</group>  
  45.         <job-class>com.xxxx.xxxx.dj.factory.DataCheckClear</job-class>  
  46.     </job-detail>  
  47.     <trigger>  
  48.         <cron>  
  49.             <name>T3</name>  
  50.             <group>DEFAULT</group>  
  51.             <job-name>J3</job-name>  
  52.             <job-group>DEFAULT</job-group>  
  53.             <cron-expression>0 0 12 * * ?</cron-expression>  
  54.         </cron>  
  55.     </trigger>  
  56. </job>  
  57. </quartz>  

3. 定时业务方法:

[java]  view plain  copy
  1. package com.xxx.xxx.xxx.factory;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.util.Date;  
  8.   
  9. import org.apache.log4j.Logger;  
  10. import org.quartz.Job;  
  11. import org.quartz.JobExecutionContext;  
  12. import org.quartz.JobExecutionException;  
  13. import org.springframework.beans.factory.annotation.Autowired;  
  14. import org.springframework.context.ApplicationContext;  
  15. import org.springframework.stereotype.Component;  
  16. import org.springframework.transaction.annotation.Transactional;  
  17.   
  18. import antlr.collections.List;  
  19.   
  20. import com.xxx.core.utils.DateUtils;  
  21. import com.xxx.core.utils.SpringContextHolder;  
  22. import com.xxx.xxx.dj.dao.DataSendingDao;  
  23. import com.xxx.xxx.dj.entity.DataSending;  
  24. import com.xxx.xxx.dj.service.ReceiveService;  
  25. import com.xxx.xxx.dj.service.SendMessageService;  
  26.   
  27. /** 
  28.  * 数据对账,定时发送数据<p> 
  29.  */  
  30. @Component  
  31. @Transactional  
  32. public class DataChecking implements Job{  
  33.   
  34.     @Autowired  
  35.     private SendMessageService sendMessageService;  
  36.     @Autowired  
  37.     private DataSendingDao dataSendingDao;  
  38.       
  39.     private static final String FAIL_FLAG = "0";  
  40.       
  41.       
  42.     /** 日志 */  
  43.     private Logger logger = Logger.getLogger(DataChecking.class);  
  44.    
  45.     @Override  
  46.     public void execute(JobExecutionContext arg0) throws JobExecutionException {  
  47.         //获取上下文环境  
  48.         ApplicationContext ctx = SpringContextHolder.getApplicationContext();  
  49.         ReceiveService receiveService = ctx.getBean(ReceiveService.class);  
  50.           
  51.         //orgName和password从政务大厅获取;统计开始时间、统计结束时间在application中配置,json在service中获取.  
  52.         long startSend = System.currentTimeMillis();  
  53.         logger.info("==========[数据对账启动]开始=========");  
  54.         System.out.println("数据对账启动时间:"+DateUtils.date2String(new Date(), DateUtils.FORMAT_DATETIME));  
  55.         String result = receiveService.getResult("XXXXXXX(单位名称)""123456");  
  56.         logger.info("==========数据对账结果:"+result+"===================");   
  57.         logger.info("==========[数据对账启动]结束-共花费[" + (System.currentTimeMillis() - startSend) + "]毫秒==========");  
  58.           
  59.         //结果result(Y:发送成功,N:发送失败).  
  60.         //处理数据对账失败的数据  
  61.         if("N".equals(result)){  
  62.             this.updateDataZwdt2shzz();  
  63.         }  
  64.     }  
  65.     /** 
  66.      * 将前置机exdata_receiving表错误信息对应的数据作为标记更新到xxxxxxx库中. 
  67.      */  
  68.     public void updateDataZwdt2shzz(){  
  69.         //======查询前置机错误信息表exdata_receiving=======  
  70.         Connection conn = sendMessageService.getZwdtConnection();  
  71.         PreparedStatement pstmt=null;  
  72.         ResultSet rs = null;   
  73.         String sql = "SELECT ST_MEMO FROM [exdata].[dbo].[EXDATA_RECEIVING] WHERE ST_MEMO IS NOT NULL";  
  74.            
  75.         try {  
  76.             pstmt=conn.prepareStatement(sql);  
  77.             rs = pstmt.executeQuery();  
  78.             while(rs.next()){  
  79.                 //取得错误信息内容  
  80.                 String content = rs.getString(1);  
  81.                 //截取第一位序号ID    
  82.                 String nmSeqId = content.substring(0, content.indexOf("SHSTSH")).trim();  
  83.                 String hql = " from DataSending d where d.nmSeqId = ?";  
  84.                 DataSending dataSending = null;  
  85.                 java.util.List<DataSending> dataSendingList = dataSendingDao.find(hql, Integer.parseInt(nmSeqId));  
  86.                 for(int i=0;i<dataSendingList.size();i++){  
  87.                     dataSending = dataSendingList.get(0);  
  88.                     if(dataSending != null){  
  89.                         //设置xxxxxx库中对账失败的数据标记为"0"  
  90.                         dataSending.setStatus(FAIL_FLAG);  
  91.                         //设置xxxxx库退回表中的错误信息   
  92.                         dataSending.setStMemo(content);  
  93.                         //更新到数据库  
  94.                         dataSendingDao.saveOrUpdate(dataSending);  
  95.                     }   
  96.                 }  
  97.             }  
  98.         } catch (SQLException e) {  
  99.             e.printStackTrace();  
  100.         }  
  101.     }  
  102. }  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值