quartz 通用的多线程定时任务
TaskManager
package mytest.task;
import java.text.ParseException;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
/**
*
*
* @author luke Lin
* @version 1.0.0 2017年8月9日 上午9:37:33
*/
public class TaskManager {
public static <T extends Job> void insertTask(String jobName,String expression,Class<T> jobCalss){
try {
Scheduler schedule = StdSchedulerFactory.getDefaultScheduler();
CronTrigger cronTrigger = new CronTrigger(jobName, Scheduler.DEFAULT_GROUP,expression);
JobDetail jobDetail = new JobDetail(jobName,Scheduler.DEFAULT_GROUP,jobCalss);
schedule.scheduleJob(jobDetail, cronTrigger);
schedule.start();
} catch (SchedulerException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
BastTask
package mytest.task;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;/**
* @author luke Lin
* @version 1.0.0 2017年8月9日 上午9:40:43
*/
public abstract class BastTask implements Job{
private static int taskCount = 0;
public static <T extends Job> void init(String jobName,String expression,Class<T> jobCalss){
TaskManager.insertTask(jobName, expression, jobCalss);
}
public void execute(JobExecutionContext context) throws JobExecutionException {
long startTime = System.currentTimeMillis();
int currentCount = taskCount++;
System.out.println(context.getJobDetail().getFullName() + "-" + currentCount + " 定时任务开始执行");
new Thread(new Runnable() {
public void run() {
doTask();
}
}).start();
long endTime = System.currentTimeMillis();
System.out.println(context.getJobDetail().getFullName() + "-" + currentCount + " 定时任务执行完成,耗时:" + (endTime - startTime) + "毫秒");
}
public abstract void doTask();
}
编码自己任务类
package mytest.task.choice;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import mytest.task.BastTask;
/**
*
*
* @author luke Lin
* @version 1.0.0 2017年8月9日 上午9:50:47
*/
public class DefaultTask extends BastTask{
private ThreadPoolExecutor cancelPoolExecutor = new ThreadPoolExecutor(10, 100, 0L, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());
@Override
public void doTask() {
//定时任务自己的任务业务
System.out.println("我要执行我的任务了!");
for(int i=0;i<10;i++){
cancelPoolExecutor.submit(new CancelOrderRunnable());
System.out.println("[cancelPoolExecutor] : " + cancelPoolExecutor.toString());
}
}
public static void main(String[] args) {
DefaultTask.init("DefaultTask", "0/1 * * * * ?", DefaultTask.class);
}
/**
* 线程取消
* @author Jews
*/
public class CancelOrderRunnable implements Runnable {
public void run() {
System.out.println("这里是我的业务逻辑");
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
quartz 通用的多线程定时任务的更多相关文章
- ASP.NET Core2.2+Quartz.Net 实现web定时任务
作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定时任务程序/脚本. 但是 ...
- 使用Quartz.net来执行定时任务
Quartz.net使用方法:http://www.cnblogs.com/lizichao1991/p/5707604.html 最近,项目中需要执行一个计划任务,组长就让我了解一下Quartz.n ...
- springboot和quartz整合实现动态定时任务(持久化单节点)
Quartz是一个完全由java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制,它支持定时任务持久化到数据库,从而避免了重启服务器时任务丢失,支持分布式多节点,大大的 ...
- 使用spring+quartz配置多个定时任务
Spring被用在了越来越多的项目中, quartz也被公认为是比较好用的定时器设置工具, 在这里通过一个demo说明如何使用spring和quartz配置多个定时任务. 环境: eclipse + ...
- JAVAEE——BOS物流项目13:Quartz概述、创建定时任务、使用JavaMail发送邮件、HighCharts概述、实现区域分区分布图
1 学习计划 1.Quartz概述 n Quartz介绍和下载 n 入门案例 n Quartz执行流程 n cron表达式 2.在BOS项目中使用Quartz创建定时任务 3.在BOS项目中使用Jav ...
- springboot整合Quartz实现动态配置定时任务
前言 在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能. 一.新建一个springboot工程,并添加依赖 & ...
- 使用quartz数据库锁实现定时任务的分布式部署
,1.根据项目引用的quartz依赖版本,确定下载的quartz-distribution安装包,我项目引用的信息如下图所示: 2.解压,在\quartz-2.2.3-distribution\qua ...
- spring boot整合quartz实现多个定时任务
版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/liuchuanhong1/article/details/78543574 最近收到了很多封邮件, ...
- Spring+Quartz实现动态添加定时任务
发布时间:2018-12-03 技术:spring4.0.2+quartz2.2.1 概述 在最近工作中,由于涉及到定时任务特别多,而这些工作又是由下属去完成的,在生成环境中经常会出现业务逻辑 ...
随机推荐
- 0905NOIP模拟测试赛后总结
40分rank33.连续爆炸祭. 这次爆炸和心态无关.主要是答题策略出了点问题.T2大众分20.暴搜打表非常强. 拿到题目看到前面人都看pdf,突然想跟风皮一把,就把刚下的doc也转成pdf了hhh ...
- memcache课程---4、php+memcache如何让用户跨域登录
memcache课程---4.php+memcache如何让用户跨域登录 一.总结 一句话总结: 让所有服务器共用一台memcache缓存,即可达到跨域的目的 1.session跨域:修改php配置文 ...
- 整合SSH框架最基本的例子
ssh框架整合 一.思路 1.导包 struts2: \apps\struts2-blank\WEB-INF\lib\所有包 struts2-spring-plugin-2.3.28.jar hibe ...
- C#用API可以改程序名字
[DllImport("user32.dll", EntryPoint = "FindWindow")] public static extern int Fi ...
- CentOS 6.5 源码编译搭建LAMP(两台独立主机实现)
搭建前准备: 1.两台独立主机 httpd:192.168.1.105 php-fpm:192.168.1.105 mariadb:192.168.1.103 2.相关软件的源码包 httpd:htt ...
- [转]使用RDLC报表
使用RDLC报表(一) 1 建立数据源 启动VS2005新建一个窗体项目,命名为TestProj 在左边的窗体内选择“添加新数据源”或在菜单上操作“添加新数据源”: 选择后出现对话窗体,选 ...
- 系统负载load
一.查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在苹果公司的Mac电脑上也适用 ...
- PHP declare 之 strict_types=1
PHP中申明 declare(strict_types=1)的作用: strict_types=1 及开启严格模式.默认是弱类型校验.具体严格模式和普通模式的区别见下面代码. code1: < ...
- Shell 语法之信号与作业
Linux 使用信号与系统上运行的进程进行通信. Linux 编程中最常见的 Linux 系统信号 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 中断进程 3 SIGQU ...
- DLINK 企业路由器内网部署web开启端口转发后还需要开启是否支持端口回流功能
跑后台使用的服务器,配置一般都很低,带宽只有2Mb 一些大型文件比如app的更新包使用这种服务器不可行 但是公司的网络是100Mb对等静态ip专线 所以能利用起来,每年将会省下8万块 说干就干,这个步 ...