`
wlh269
  • 浏览: 448374 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring定时任务

阅读更多
1.配置文件:ScheduledTimerTask是spring内置的一个类,
    在它的timerTask标签中引入我们需要定时执行的业务代码,这里例如,targetSMSQueryTaskBiz;在period标签中加入执行频率,单位为毫秒;


 <bean id="targetSMSQueryTaskBiz"  class="com.hollyinfo.invest.biz.message.SMSQueryBizImpl">
	      <property name="fileClient">
	       <ref bean="fileClient"/>
	      </property>
	      <property name="messageDao">
				<ref bean="messageDao" />
		  </property>
	  </bean>
	 <bean id="scheduledSMSQureyTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    	<property name="timerTask">
      		<ref bean="targetSMSQueryTaskBiz"/>
    	</property>
   		<property name="period">
      	  <value>60000</value>
    	</property>
     </bean>
	<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
		<property name="scheduledTimerTasks">
     	 <list>
        	<ref bean="scheduledSMSQureyTask"/>
     	 </list>
    	</property>
   </bean>
   	<bean id="SMSQueryTaskBiz" parent="jdbcTransactionProxy">
		<property name="target" ref="targetSMSQueryTaskBiz" />
	</bean>



2.业务类代码,这里为SMSQueryBizImpl,该类继承TimerTask,而TimerTask实现了Runnable接口,所以我们的业务类要实现run()方法;
public class SMSQueryBizImpl extends TimerTask implements SMSQueryBiz  {
	/** 日志初始化 */
	private static HollyinfoLog LOG = HollyinfoLogger.getLog(MessageBizImpl.class);
	private SMSFileTransClient fileClient;
	public void setFileClient(SMSFileTransClient fileClient) {
		this.fileClient = fileClient;
	}
	/** 消息数据通道接口 */
	private MessageDao messageDao;
	
	public void setMessageDao(MessageDao messageDao) {
		this.messageDao = messageDao;
	}
	public SMSQueryBizImpl() {
		
	}
	 public void run() {
		 try{
			//查询待接收结果文件
	    	List fileNames=fileClient.queryFileList();
	    	for (Iterator iterator = fileNames.iterator(); iterator.hasNext();) {
				String fileName = (String) iterator.next();
				int idx=fileName.indexOf(".");
				String preName=fileName.substring(0, idx);
				//下载结果文件
				boolean flag=fileClient.download(preName, "txt");
				if(flag){
					LOG.info("下载结果文件"+fileName+","+flag);
					Thread.sleep(10000);
					 boolean delflag=false;
					 if(readLastLine(new File(SystemParameter.smsResultDir+File.separator+fileName),"utf-8").indexOf("EOF")!=-1){
						 //删除服务端已下载文件
						 delflag=fileClient.deleteFile(preName, "txt");
						 //更新发送结果到核心系统
						 updateSendResults(fileName);
					  }
					 //删除客户端已下载文件
					 delFile(new File(SystemParameter.smsResultDir+File.separator+fileName));
					  
			    	LOG.info("删除中间服务结果文件"+fileName+","+delflag);	 
			    	 
			    }else{
					LOG.info("下载结果文件"+fileName+","+flag);
				}
			}
	    	
	    	//======检查是否还有没上传成功的文件,做重新上传操作=====//
	    	 String [] filenames=new File(SystemParameter.smsSendDir).list();
	    	 for (int i = 0; i < filenames.length; i++) {
             	 File tmpFile=new File(SystemParameter.smsSendDir+File.separator+filenames[i]);
             	 Pattern p = Pattern.compile("sms_send_list.+?txt");
             	 Matcher fMatcher = p.matcher(tmpFile.getName());
             	 //如果后缀为txt开头为sms_send_list,且内容不为空的文件
             	 if (fMatcher.matches()&& NotEmptyFile(tmpFile)&&readLastLine(tmpFile,"utf-8").indexOf("EOF")!=-1) {
             		boolean hasUpload=fileClient.upload(filenames[i], tmpFile, "txt");
             		if(hasUpload){
            			LOG.info("重复上传待发催报短信息文件:"+filenames[i]+"成功!");
            			try {
    						Thread.sleep(10000);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    					//删除已经上传的信息文件
            		   boolean flag =delFile(tmpFile);
            		   if(flag){
            			   LOG.info("删除待发催报短信息文件:"+filenames[i]+"成功!");   
            		   }
            		   
            		}else{
            			LOG.info("重复上传待发催报短信息文件:"+filenames[i]+"失败!");
            		}
             	 }
	    	 } 
	    	
		 }catch (InterruptedException e) {
				e.printStackTrace();
		 }
	   }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics