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='定时发布任务表'
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;
}
}