java时间控件jar包,java开发的执行jar包任务调度系统

项目介绍

我们经常会开发一些定时任务的程序,基本上都是打包成jar然后执行的,任务多了就无法统一管理,所以开发了此系统,对所有任务进行可视化的管理,发布任务,重启任务,停止任务,实时异常监控等等。

本源码仅供各位学习参考。数据库表可以根据项目中的实体类去建表,不提供原始sql文件。

主要技术如下:

spring mvc

mysql

统一异常处理以及日志记录(自定义注解方式)

websocket处理异常实时推送到页面显示

多任务调度

jquery自定义插件(表格插件,表单插件,消息框插件,下拉框插件)

工程包列表

38fb77d9f47c5a10f47ec894ca018030.png

插件列表

1c6173f3fa45ef943c95f79ac61d7c3b.png

表格插件使用

$(function(){

//注册表格

var registerTable = function(){

//控制器接收分页参数的名称:当前页是currentPage页大小pageSize

$("#execLogTable").table({

url:baseUrl+"protected/task/queryTaskExecLogByPage.htm",

method:"post",

align:"center",

pageBarAlign:"right",

pageSize:10,

queryformId:"queryExecLogForm",

pageSizeList:"{10,20,50}",

isPage:true,

model:[

{field:"taskName",label:"任务名称",width:240},

{field:"executeTime",label:"执行时间",width:200},

{field:"execPeriod",label:"执行周期(分钟)",width:200},

{field:"execResult",label:"执行结果",width:200}

]

});

};

registerTable();

});

WebSocket连接池

public class TaskInboundPool {

private static Logger logger = Logger.getLogger(TaskStatusMonitor.class);

//保存连接的MAP容器

private static final Map connections = new ConcurrentHashMap();

//向连接池中添加连接

public static void addMessageInbound(TaskInbound inbound){

connections.put(inbound.getUser(), inbound);

}

//移除连接

public static void removeMessageInbound(TaskInbound inbound){

connections.remove(inbound.getUser());

}

//向所有的用户发送消息

public static void sendMessage(String message){

try {

Set keySet = connections.keySet();

for (String key : keySet) {

TaskInbound inbound = connections.get(key);

if(inbound != null){

inbound.getWsOutbound().writeTextMessage(CharBuffer.wrap(message));

}

}

} catch (IOException e) {

logger.error("向所有的用户发送状态消息异常", e);

}

}

}

控制器代码

@RequestMapping(value="queryTaskByPage")

@ResponseBody

@ExceptionMessageTitle(value="查询任务信息出现异常")

public String queryTaskByPage(PageParamBean paramBean,String taskName) throws Exception{

Map map = new HashMap();

map.put("success", true);

PageBean page = taskService.queryTaskByPage(paramBean,taskName);

List list = CopyBeanDataUtil.copyListByDateConvert(LBTaskInfo.class, page.getList());

map.put("totalRecords", page.getTotalRecords());

map.put("data", list);

return JsonUtils.toJson(map);

}

停止任务代码示例

@Transactional

@Override

public String stopTask(Integer id) throws Exception {

LBTask task = super.getById("id",id);

String savePath = ConfigUtil.getInstance().getProcedureFileSavePath();

String runCmd = savePath + File.separator + task.getCatalogue() + File.separator + task.getRunScript();

int pid = ProcessUtil.getLinuxOSProcedureProcessId(runCmd);

if(pid < 0){

logger.info("【"+task.getTaskName()+"】分析任务没有运行,不能停止。");

LBTaskStatus taskStatus = CacheData.taskRunStatus.get(task.getId());

TaskStatusUtil.resetTaskStatus(id, taskStatus.getStatus() == null ? "未运行" : taskStatus.getStatus());

return Result.NOSTOP;

}

//停止分析任务,标记停止,下次启动时不启动已标记停止的,不能kill掉进程来停止

if(task.getExecuteSign().equals(1)){

logger.info("【"+task.getTaskName()+"】分析任务正在停止中,不能停止。");

TaskStatusUtil.resetTaskStatus(id, "正在停止");

return Result.CURRENTSTOP;

}

task.setExecuteSign(1);

super.update(task, "id");

return Result.SUCCESS;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值