Quartz实现执行任务记录数据库,方便计算任务的执行次数以及成功次数
任务执行实体
/**
* 任务执行情况详情
*/
public class JobExecuteDetail implements Serializable{
/**
*
*/
private static final long serialVersionUID = 3145929362286951322L; /**
* 名称
*/
private String triggerName; /**
* 组名
*/
private String triggerGroup; /**
* 成功数
*/
private int successTimes = 0; /**
* 执行时间
*/
private String date; public String getTriggerName() {
return triggerName;
} public void setTriggerName(String triggerName) {
this.triggerName = triggerName;
} public String getTriggerGroup() {
return triggerGroup;
} public void setTriggerGroup(String triggerGroup) {
this.triggerGroup = triggerGroup;
} public int getSuccessTimes() {
return successTimes;
} public void setSuccessTimes(int successTimes) {
this.successTimes = successTimes;
} public String getDate() {
return date;
} public void setDate(String date) {
this.date = date;
} @Override
public String toString() {
return "JobExecuteDetail [triggerName=" + triggerName
+ ", triggerGroup=" + triggerGroup + ", successTimes=" + successTimes
+ ", date=" + date + "]";
}
}
执行的任务记录到队列,
JobExecuteDetailQueue是自己声明的一个队列
public class SerializableQuartzJobBean extends QuartzJobBean {
static final Logger logger = LoggerFactory.getLogger(SerializableQuartzJobBean.class);
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
JobExecuteDetail detail= new JobExecuteDetail();
try {
Object otargetObject = ctx.getBean(targetObject);
TriggerKey key = context.getTrigger().getKey();
detail.setTriggerGroup(key.getGroup());
detail.setTriggerName(key.getName());
detail.setDate(DateHelper.format(new Date(), "yyyy-MM-dd"));
Method m = null;
try {
m = otargetObject.getClass().getMethod(targetMethod, new Class[] {});
m.invoke(otargetObject, new Object[] {});
detail.setSuccessTimes(1);
} catch (SecurityException e) {
e.printStackTrace();
logger.error("任务调度运行出错:", e);
} catch (NoSuchMethodException e) {
e.printStackTrace();
logger.error("任务调度运行出错:", e);
}
} catch (Exception e) {
throw new JobExecutionException(e);
} finally {
JobExecuteDetailQueue jobExecuteDetailQueue = ctx.getBean(JobExecuteDetailQueue.class);
jobExecuteDetailQueue.offer(detail);
}
}
private ApplicationContext ctx;
public void setApplicationContext(ApplicationContext applicationContext) {
this.ctx = applicationContext;
}
private String targetObject;
public void setTargetObject(String targetObject) {
this.targetObject = targetObject;
}
private String targetMethod;
public void setTargetMethod(String targetMethod) {
this.targetMethod = targetMethod;
}
}
从队列中取出任务执行的内容存入数据库即可
Quartz实现执行任务记录数据库,方便计算任务的执行次数以及成功次数的更多相关文章
- 一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行
一,介绍 Oozie是一个基于Hadoop的工作流调度器,它可以通过Oozie Client 以编程的形式提交不同类型的作业,如MapReduce作业和Spark作业给底层的计算平台(如 Cloude ...
- 使用aop记录数据库操作的执行时间
在项目中,我们往往需要记录数据库操作的时间,根据操作时间的不同,分别记录不同等级的日志. 首先我们可以写一个类实现MethodInterceptor接口: import org.aopalliance ...
- c# 数据库编程(通过SqlCommand 执行DML语句)
原来一直是java,python等语言,最近用c#语言,并编写数据库访问代码.使用了之后,这里总结下,分享下c#如何操作数据库. 在java等其它语言中,有一套标准的api来完成数据库访问,并且一般都 ...
- 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测
如何使用T-SQL备份还原数据库及c#如何调用执行? 准备材料:Microsoft SQL Server一部.需要还原的bak文件一只 一.备份 数据库备份语句:user master backup ...
- ylbtech-Recode(记录)-数据库设计
ylbtech-dbs:ylbtech-Recode(记录)-数据库设计 -- =============================================-- DatabaseName ...
- 内容观察者 ContentObserver 监听短信、通话记录数据库 挂断来电
Activity public class MainActivity extends ListActivity { private TextView tv_info; private ...
- SQL 2005 中查询或执行另外的数据库操作的方法
原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...
- 让FIREDAC记录数据库的异常日志
默认FIREDAC不会记录数据库的异常. 比如典型的,提交的时候,非空字段没有给值. 某些人还以为FIREDAC不能捕获数据库的异常,其实FIREDAC是可以捕获并处理数据库的异常事件的. 方法异常简 ...
- OpenStack(queens)最小化搭建记录——控制与计算共两个节点
境: 2台安装了centos7-minimal的主机 ip地址: 10.132.226.103/24 (controller) 10.132.226.104/24 (compute1) 1.配置主机名 ...
随机推荐
- js弹开页面并调用方法
每次重新写一个功能的时候,都能发现以前写的并不太好,都可以改进,奇怪的是我还是我,为什么曾经的我就想不起来要这么写,比如下面两段代码 历史代码: if (infoTablePage != null) ...
- Android—修改button属性
一般安卓里的普通按钮控件灰灰的,比较单调,我们可以给按钮加上背景图片,或者自定义按钮的圆角,颜色等属性. 下面用代码举例: <Button android:id="@+id/reset ...
- Django - 一对多跨表操作
1.views.py 2.host.html 运行结果: 通过外键,来进行多表取值(多表取值包括后台取值及前端获取): 多表获取数据时,可以通过以下几种方式实现: 1.从query set 中获取某 ...
- Ubuntu 16.04 安装R和RStudio
在Ubuntu上安装R和Rstudio的时候碰到了一些依赖项不存在的错误 The following packages have unmet dependencies: r-base-core : D ...
- Google Cloud SSH 连接配置
设置当前用户及root用户的密码 sudo passwd xx-user # 输入新密码 sudo passwd root # 输入新密码(建议保持一样) 在本地生成私钥和公钥 cd ~/.ssh s ...
- Git 基础教程 之 标签
所谓标签:就是一个让人容易记住的有意义的名字,与某个commit绑在一起. 创建标签:①切回需要打标签的分支上 ② git tag <name> 默认标 ...
- Vue 安装教程
1.下载node.js https://nodejs.org/en/ 2.检查环境变量: npm init (初始化项目) npm i webpack vue vue-loader 安装依赖: npm ...
- [TyvjP1515] 子串统计 [luoguP2408] 不同子串个数(后缀数组)
Tyvj传送门 luogu传送门 经典题 统计一个字符串中不同子串的个数 一个字符串中的所有子串就是所有后缀的前缀 先求出后缀数组,求出后缀数组中相邻两后缀的 lcp 那么按照后缀数组中的顺序遍历求解 ...
- 请问spfa+stack 和spfa+queue 是什么原理
一个是bfs加迭代 一个是dfs加迭代 请问迭代是什么 就是不断地做,做到没有更优的解为止 或者是不断得做,做到逼近答案为止.. 栈比队列更快更节省空间
- [bzoj1468][poj1741]Tree[点分治]
可以说是点分治第一题,之前那道的点分治只是模模糊糊,做完这道题感觉清楚了很多,点分治可以理解为每次树的重心(这样会把数分为若干棵子树,子树大小为log级别),然后统计包含重心的整个子树的值减去各个子树 ...