java 编写定时任务步骤

1.定时任务表:数据库录入定时任务的数据 

CREATE TABLE `t_timertask` (                                                                                    
               `task_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '任务ID',                                                 
               `user_id` int(11) DEFAULT NULL COMMENT '用户ID',                                                            
               `task_type` int(10) DEFAULT NULL COMMENT '类型(1:节目,2:广告,3:垫片,4:LED,5:框架,6:广告排片)',  
               `task_title` varchar(60) DEFAULT NULL COMMENT '标题',                                                       
               `task_time` datetime DEFAULT NULL COMMENT '任务执行时间',                                               
               `task_status` int(11) DEFAULT '0' COMMENT '任务执行状态(0:未执行,1:已执行)',                      
               `task_method` varchar(30) DEFAULT NULL COMMENT '任务方法',                                                
               `task_param` text COMMENT '任务参数',                                                                     
               `status` int(11) DEFAULT '0' COMMENT '使用标志(1使用/-1删除)',                                        
               PRIMARY KEY (`task_id`)                                                                                       
             ) ENGINE=InnoDB AUTO_INCREMENT=1027 DEFAULT CHARSET=utf8 COMMENT='定时发布任务表'          


2.定时任务每1min调用一次

public class TimerTaskServer {
	private static Logger logger = Logger.getLogger(TimerTaskServer.class);
	/** 休眠时间(分钟) */
	private int minute = 60;
	
	public void start() {
		logger.info("----------------start TimerTaskServer----------------");
		logger.info("minute:"+minute);
		TimerTaskRunnable task = new TimerTaskRunnable(minute);
		new Thread(task).start();
		logger.info("start TimerTaskServer SUCCESS");
	}

	public int getMinute() {
		return minute;
	}

	public void setMinute(int minute) {
		this.minute = minute;
	}
	
	public static void main(String[] args) {
		new TimerTaskServer().start();
	}
}


/**
	 * 执行定时任务
	 * @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public boolean executeTimerTask(int minute){
		try {
			List<Map> list = getInstance().select(null, "and task_status = 0", true);
			Integer task_id = 0;
			String task_method = "";
			String task_time = "";
			String task_param = "";
			Map filemap = new HashMap();
			Map result = new HashMap();
			JSONObject jsonObject = null;
			Date taskDateTime = null;
			Date now = new Date();
			for(Map taskmap : list){
				//任务执行时间
				task_time = StringUtil.getMapValue(taskmap, "task_time");	
				if(StringUtil.isBlank(task_time)){
					continue;
				}
				//比较时间
				taskDateTime = parse(task_time);
				if(taskDateTime == null) {
					continue;
				}
				//转换成long类型
				long taskTime = taskDateTime.getTime();				
				long interval = now.getTime() - taskTime;
				if(interval < 0 || Math.abs(interval) > minute * 60000){
					//此任务未到执行时间	或在下一个运行周期之前				
					continue;
				}
				//任务ID
				task_id = StringUtil.getMapValueInt(taskmap, "task_id");
				if(task_id == null || task_id < 1){
					continue;
				}
				//参数
				task_param = StringUtil.getMapValue(taskmap, "task_param");//				
				if(StringUtil.isBlank(task_param)){
					continue;
				}
				//数据转换
				jsonObject = JSONObject.fromObject(task_param);
				filemap = (Map)JSONObject.toBean(jsonObject, Map.class);
				//任务执行方法
				task_method = StringUtil.getMapValue(taskmap, "task_method");
				//执行发布任务
				logger.info("TimerTaskManager execute  start: "+filemap);
				result = this.execute(filemap, task_id, task_method);
				logger.info("TimerTaskManager execute end: result="+result.get("status"));				
			}
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage());			
		}
		return false;
	}
3.执行业务
/**
	 * 文件发布
	 * @param filemap	文件信息
	 * @param task_id	任务ID
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public Map execute(Map filemap, int task_id, String task_method){
		logger.info("start:publish");
		TransactionTemplate tt = DABroker.getInstance().getTransactionTemplate();
		Map result = new HashMap();
		Map param = new HashMap();
		try {
			if("publish".equals(task_method)){
				PublishTransactionCallback callback = new PublishTransactionCallback(filemap, result, param, task_id);
				tt.execute(callback);	
			} else if("republish".equals(task_method)){
				RePublishTransactionCallback callback = new RePublishTransactionCallback(filemap, result, param, task_id);
				tt.execute(callback);	
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		logger.info("end:publish:" + result);
		return FileActionManager.callCS(param, result);
	}


//对数据库的操作

/**
 * 文件发布事物处理类
 * @author 
 *
 */
public class PublishTransactionCallback implements TransactionCallback{
	


private static Logger logger = Logger.getLogger(PublishTransactionCallback.class);
private Map map = new HashMap();
private Map result = new HashMap();
private Map param = new HashMap();
private int task_id;

/**
 * 文件发布事物处理类
 * @param filemap需要发布的文件信息
   处理结果
  处理完成后需要收集的参数
  定时任务ID
 */
public PublishTransactionCallback(Map filemap, Map result, Map param, int task_id) {
super();
this.map = filemap;
this.result = result;
this.param = param;
this.task_id = task_id;
}

@Override
public Object doInTransaction(TransactionStatus status) {	

return null;
}
}
		






































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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值