原标题:SpringCloud整合Dubbo3实战高并发下的微服务架构设计研究无Mi
统一管理项目中所有的调度任务,使用quartz进行任务调度。
SpringCloud整合Dubbo3实战高并发下的微服务架构设计研究无Mi
download:https://www.51xuebc.com/thread-490-1-1.html
设计理念
使用与quartz相关的jar包。我懒得升级。我用的是Quart1.6。
编写一个计划任务管理类。
使用数据库表统一计时任务。
项目启动时,定时任务管理也启动,同时开启定时任务。
创建一个页面来管理数据库的计划任务。如果任务被修改、删除、停止等。,修改相应的计划任务。
当项目停止时,停止计划的任务。
部分实现代码
数据库脚本
如果存在sys_scheduler ,则删除表;
创建表` sys_scheduler `(
` id int(11)NOT NULL AUTO _ INCREMENT,
` cron ` varchar(255)NOT NULL DEFAULT ,
` job_name` varchar(255)默认为NULL,
` job _ class ` varchar(255)NOT NULL DEFAULT ,
` modify_time `日期时间默认为空,
` is _ start` char (1)默认 0 注释任务状态是否已开始,1-开始,0-未开始,
主键(` id `)
)ENGINE=MyISAM默认字符集= utf8
/*表` sys_scheduler` */的数据
插入` sys_scheduler`(`id `,` cron `,` job_name `,` job_class `,` modify_time `,` is_start `)值(1, 0 30 * * *?、样本计划任务、 com.common.job.examplejob 、 2016-05-06 16: 42: 14 、 0 );
定时任务管理(省略数据库操作类)
包com . common . utils;
导入Java . util . iterator;
导入Java . util . list;
导入org . Apache . log4j . logger;
导入org . quartz . cron trigger;
导入org . quartz . jobdata map;
导入org . quartz . job detail;
导入org . quartz . scheduler;
导入org . quartz . schedule exception;
导入org . quartz . scheduler factory;
导入com . common . Dao . sysschedulerdao;
导入com . common . model . sysscheduler;
/**
*定时任务管理类
* @作者ppnie
*/
公共类调度管理器
}
静态scheduler factory sched fact = new org . quartz . impl . STD scheduler factory();
静态调度程序sched = null
static scheduler manager scheduler mgr = null;
private static final Logger Logger = Logger . get Logger(scheduler manager . class . getname());
/**
*创建一个定时任务单例,并初始化和启动定时任务。
* @返回
*/
公共静态SchedulerManager getInstance()
{
if (schedulerMgr == null)
{
scheduler mgr = new scheduler manager();
scheduler mgr . init();
}
返回schedulerMgr
}
/**
*初始化计划任务。
*/
公共void init()
{
尝试
{
sched = sched fact . get scheduler();
}
捕捉(例外e)
{
logger . error(” init 1:”+e . getmessage());
}
start();
/*从数据库启动计划任务*/
SysSchedulerDao ss Dao = new SysSchedulerDao();
list CD lists = ss Dao . getschedulerlistbystart(ss Dao . need _ start);
迭代器IR = CD lists . iterator();
//system . out . println(“-Init Scheduler-“);
while (ir.hasNext())
{
SysScheduler scheduler = IR . next();
scheduleJob(调度程序);
}
}
公共void scheduleJob(SysScheduler调度程序)
{
schedule job(“+scheduler . getid()、scheduler.getJobClass()、scheduler . getcron());
if (isStarted())
{
system . out . println(” Schedule “+scheduler . getjobname()+” class = “+scheduler . getjobclass()+” cron = “+scheduler . getcron());
}
}
/**
*将任务添加到任务计划程序。
* @param jobId任务Id
* @param jobClass任务作业类名
* @param cron计时时间
*设置定时器调度的调度格式:秒、分、日、月、周0 0 12 * *?每天中午12点触发0 15 10 15 *?每月15日10: 15触发0 15 10?* 2-6
*每周一、二、三、四、五10: 15触发
*/
public void scheduleJob(字符串jobId,字符串jobClass,字符串cron)
{
if (isStarted())
{
尝试
{
class cls = class . forname(job class);
job detail job detail = new job detail(jobId,Scheduler。DEFAULT_GROUP,cls);
cron trigger trigger = new cron trigger(jobId,Scheduler。DEFAULT_GROUP,cron);
sched.scheduleJob(jobDetail,trigger);
}
捕捉(例外e)
{
System.out.println(“调度作业在此报告错误”+Job class);
logger . error(” schedule job:”+e . getmessage());
* @param jobId
* @param jobClass
* @param cron
* @param data_map
*/
public void schedule job(String jobId,String jobClass,String cron,String data_map)
{
if (isStarted())
{
system . out . println(” Schedule “+job class+” cron = “+cron);
尝试
{
class cls = class . forname(job class);
job detail job detail = new job detail(jobId,Scheduler。DEFAULT_GROUP,cls);
cron trigger trigger = new cron trigger(jobId,Scheduler。DEFAULT_GROUP,cron);
sched.scheduleJob(jobDetail,trigger);
sched.deleteJob(jobId,调度程序。DEFAULT _ GROUP);
}
捕捉(例外e)
{
logger . error(” delete job:”+e . getmessage());
}
}
/**
*重新发布任务,在这种情况下,根据jobId修改任务执行时间玉米。
* @param jobId
* @param cron
*/
public void resschedule job(String jobId,String cron)
{
尝试
{
job detail JD = sched . getjobdetail(jobId,Scheduler。DEFAULT _ GROUP);
JobDataMap jdm = JD . getjobdatamap();
cron trigger trigger = new cron trigger(“+jobId,Scheduler。DEFAULT_GROUP,cron);
trigger . setjobname(“+jobId);
trigger.setJobGroup(调度程序。DEFAULT _ GROUP);
trigger . setjobdatamap(jdm);
sched.rescheduleJob(jobId,Scheduler。DEFAULT_GROUP,trigger);
}
捕捉(例外e)
{
logger.error(“重排作业:”+e);
}
}
/**
*启动任务计划程序
*只有当调度程序具有实例或待机模式时,才能调用start()方法。
*/
公共void开始()
{
尝试
{
sched . start();
}
捕捉(例外e)
{
logger . error(” start:”+e);
}
}
/**
*关闭任务计划程序Scheduler。
*一旦调用了shutdown()方法,就不能调用start()方法。
*/
公共无效关闭()
{
System.out.println(” -关闭调度程序-“);
尝试
{
sched . shut down();
}
捕捉(例外e)
{
logger . error(” shut down:”+e . getmessage());
}
schedulerMgr = null
}
/**
*判断任务调度器Scheduler是否启动。
* @返回
*/
公共布尔值isStarted()
{
布尔re = false
尝试
{
re = sched . is started();
}
捕捉(例外e)
{
logger . error(” is started:”+e . getmessage());
}
返回re;
}
/**
*判断任务调度器Scheduler是否关闭。
* @返回
* @抛出SchedulerException
*/
public boolean isShutdown()
{
布尔re = false
尝试
{
sched . isshutdown();
}
catch(调度异常e)
{
logger . error(” isShutdown:”+e . getmessage());
}
返回re;
}
/**
*将调度程序设置为待机模式。
*在待机模式下,调度程序会暂时停止查找要执行的作业。
*/
公共void备用(){
System.out.println(” -备用调度程序-“);
尝试{
sched . stand by();
}
捕捉(异常e) {
logger . error(” stand by:”+e . getmessage());
}
}
/**
*确定调度程序是否在待机模式下运行。
*/
公共布尔值isInStandbyMode() {
布尔re = false
尝试{
re = sched . isinstandbymode();
} catch(异常e) {
logger . error(” isInStandbyMode:”+e . getmessage());
}
返回re;
}
/**
*确定任务是否存在。
* @param jobId
* @返回
*/
public boolean checkExists(字符串jobId)
{
布尔re = false
尝试
{
cron trigger trigger =(cron trigger)sched . get trigger(“+jobId,Scheduler。DEFAULT _ GROUP);
返回触发器!= null
}
catch(调度异常e)
{
logger . error(” check exists:”+e . getmessage());
}
返回re;
}
}
随着项目的开始和停止,您可以设置一个servlet,在init方法中初始化任务管理类,并在destory方法中关闭它。
复制
SysSchedulerServlet
com . common . servlet . sysschedulerservlet
责任编辑:
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容