Java中TimerTask、Timer

1、任务代码

package com.cvicse.inforguard.utmp.analysis.engine.timer;

import java.util.Calendar;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.cvicse.inforguard.utmp.analysis.engine.impl.thread.GenuineThread;
import com.cvicse.inforguard.utmp.analysis.storage.asset.service.api.IAssetSrv;
import com.cvicse.inforguard.utmp.analysis.storage.common.DSMark;
import com.cvicse.inforguard.utmp.analysis.storage.dao.api.IBaseDao;
import com.cvicse.inforguard.utmp.analysis.storage.entity.org.CB_Asset;
import com.cvicse.inforguard.utmp.analysis.storage.model.TB_Assets;
import com.cvicse.inforguard.utmp.common.exception.EXP_Base;

/**
 * 
 * 描述:
 * <p>
 *     定时器进行验证资产操作系统的正版与否
 * </p>
 * 创建日期:2012-8-14 上午10:49:13<br>
 * 
 * @author:tian_yjing<br>
 * @update:$Date: 2012-08-14 16:32:48 +0800 (周二, 2012-08-14) $<br>
 * @version:$Revision: 5015 $<br>
 * @since 1.0.0
 */
public class TimingGenuineTask extends TimerTask{

	/**
	 * 日志记录
	 */
	private static final Log LOG = LogFactory.getLog(TimingGenuineTask.class);
	
	/** 间隔时间 20分钟 */
	private static final long TIMING_TIME = 1200000;
	
	/**
	 * Dao对象
	 */
	private IBaseDao m_baseDao;
	
	private Timer timer = new Timer();
	
	/**
	 * 资产Service
	 */
	private IAssetSrv m_assetSrv = null;
	
	/**
	 * 构造方法
	 */
	public TimingGenuineTask(IAssetSrv m_assetSrv) {
		this.m_assetSrv = m_assetSrv;
		this.m_baseDao = this.m_assetSrv.getBaseDao();
	}
	
	public void start() {
		// 当系统启动时开始执行,每隔24小时执行一次
		timer.schedule(this, getRunCalendar().getTime(), TIMING_TIME);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public void run() {
		// 1、得到数据库中存放没有验证的资产列表
		StringBuffer sBuffer = new StringBuffer();
		sBuffer.append("From ")
			.append(DSMark.TB_ASSETS)
			.append(" WHERE oid='")
			.append(   CB_Asset.TYPE_GV)
			.append("' AND genuineValidation IS NULL");
			
		List<?> assetList = null;
		try {
			assetList = m_baseDao.query(sBuffer.toString());
		
			// 2、启动新线程验证资产是否正版
			if (assetList != null && assetList.size() > 0) {
				for (TB_Assets tbAsset : (List<TB_Assets>)assetList) {
					// 启动线程进行验证
					new GenuineThread(m_assetSrv, tbAsset).start();
				}
			}
		} catch (EXP_Base e) {
			LOG.error("获取操作系统正版序列号验证线程出现异常.");
		}
	}
	
	/**
	 * 获得定点时间
	 * @return
	 */
	private Calendar getRunCalendar() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY,9);
		calendar.set(Calendar.MINUTE,0);
		calendar.set(Calendar.SECOND,0);
		return calendar;
	}
	
}


 

2、任务启动线程验证代码

package com.cvicse.inforguard.utmp.analysis.engine.impl.thread;

import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.cvicse.inforguard.utmp.analysis.storage.asset.service.api.IAssetSrv;
import com.cvicse.inforguard.utmp.analysis.storage.common.DSMark;
import com.cvicse.inforguard.utmp.analysis.storage.dao.api.IBaseDao;
import com.cvicse.inforguard.utmp.analysis.storage.entity.org.CB_Asset;
import com.cvicse.inforguard.utmp.analysis.storage.model.TB_Assets;
import com.cvicse.inforguard.utmp.common.exception.EXP_Base;

/**
 * 启动定时器验证数据库中资产(操作系统)正版问题
 * 
 * @author tian_yjing
 *
 */
public class GenuineThread  extends Thread{

	/**
	 * 日志记录
	 */
	private static final Log LOG = LogFactory.getLog(GenuineThread.class);
	
	/**
	 * 资产服务
	 */
	private IAssetSrv m_assetSrv;
	
	/**
	 * 资产数据模型
	 */
	private TB_Assets tbAsset;
	
	/**
	 * 底层数据操作
	 */
	private IBaseDao m_baseDao;
	
	/**
	 * 构造方法
	 * @param assetSrv
	 * @param tbAsset
	 */
	public GenuineThread(IAssetSrv assetSrv, TB_Assets tbAsset) {
		this.m_assetSrv = assetSrv;
		this.m_baseDao = this.m_assetSrv.getBaseDao();
		this.tbAsset = tbAsset;
	}
	
	@Override
	public void run() {
		// 根据assetId获取资产的类型,资产代理的IP,端口等,得到的信息封装到CB_Asset对象里面
		try {
			CB_Asset cb_Asset = m_assetSrv.getAssetInfoById(tbAsset.getId());
			String systemSN = this.getRemoteSystemSN(cb_Asset);
			String updateSQL = "UPDATE assets t SET t.genuineValidation='是' WHERE t.id='";
			if (comparedWithGenuineLib(systemSN)) {
				tbAsset.setGenuineValidation("是");
				// 更新数据库
				m_baseDao.executeDeleteOrUpdateJDBC(updateSQL + tbAsset.getId().trim() + "'");
			}
		} catch (EXP_Base e) {
			LOG.error("资产[" + tbAsset.getId() + "]验证操作系统正版线程出现异常.");
		}
	}
	
	/**
	 * 验证从代理端传递过来的SN是否在正版库中
	 * 存在返回true,不存在返回false
	 * @param systemSN
	 * @return
	 * @throws EXP_Base
	 */
	private boolean comparedWithGenuineLib (String systemSN) throws EXP_Base {
		List<?> genuineList = null;
		if (systemSN != null && !"".equals(systemSN)) {
			// SN格式:4RFS-SFSA-FBGD-EFRD
			String[] systemSNArry = systemSN.split("-");
			// 与正版序列号库进行对比
			String getSystemInfoHql = "FROM " + DSMark.TB_GENUINEVALIDATION;
			for (String str : systemSNArry) {
				getSystemInfoHql = getSystemInfoHql + " WHERE sn like '%" + str.trim() + "%'";
				// 多个部分序列号(上述例子就是多个)
				if (systemSNArry.length > 1) {
					getSystemInfoHql = getSystemInfoHql + " or sn like '%" + str.trim() + "%'";
				} 
			}
			genuineList = m_baseDao.query(getSystemInfoHql);
		}
		
		return genuineList != null ? (genuineList.size() > 0 ? true : false) : false;
	}
	
	/**
	 * 获得远程资产(操作系统)的正版序列号
	 * @param cb_Asset
	 * @return
	 */
	private String getRemoteSystemSN (CB_Asset cb_Asset) {
		String remoteSystemSN = null;
		try {
			List<Map<String, String>> 
				assetMonitorlist = m_assetSrv.getRemoteProperty(cb_Asset);
			cb_Asset.getExtendedMap().clear();
			for (Map<String, String> map : assetMonitorlist) {
				cb_Asset.getExtendedMap().putAll(map);
			}
		} catch (EXP_Base e) {
			LOG.error("资产[" + cb_Asset.getId() + "]在从代理端取值时出现异常.");
		}
		remoteSystemSN = cb_Asset.getExtendedMap().get("SN");
		return remoteSystemSN;
	}
}


 

3、启动任务

		// 定时验证资产的正版与否
		TimingGenuineTask timerGenuineTask = new TimingGenuineTask(m_assetSrv);
		timerGenuineTask.start();


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值