Cube-web系统之Quartz+Spring实现任务监控管理

 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。作为一个优秀的开源调度框架,Quartz 具有功能强大,应用灵活,易于集成的特点

 

      目前项目处于运维阶段中期,事情不多,所以有时间将自己用过的技术以及想要学习的技术整理一下,所以萌生一个自己做项目的想法,通过自己做项目将这些年使用的技术以及想要学习和深入了解的技术做一个总结,做项目第一件事就是给项目起名字,发现起名字这件事说简单也简单,说难也难,想取一个响亮点名字吧才发现自己语言有多么的匮乏,不过还好,由于最近再玩魔方,所以就用魔方的单词来作为项目的名字,反正最终目的是为了对自己这几年技术的总结,无所谓了.....

 



 

上图就是自己想到的项目模块,当然后续还会在增加,想到一些就加一些,目前只是实现了系统管理也就是权限部分还有系统监控部分的作业监控

 

项目简介:

项目名称:CUBE

项目使用的开发语言:Java

项目框架:Struts2+Spring+Hibernate+Maven

服务器:Tomcat

数据库:Mysql

开发工具:Eclipse

前端:easyui

 

目前CUBE项目的效果如图:

 

登陆界面:

 



 

登陆后的主界面

 



 

美工这活儿真心不好做啊,现在主界面的效果就是这样了,top和bottom还需要在美化一下,后期在做吧

 

下面是作业监控的最终效果:

 



 

触发器添加界面,触发器的时间规则使用CronTrigger

 



 

上边就是CUBE系统中的作业监控部分的最终实现

 

Quartz是Java领域最著名的开源任务调度工具。Quartz提供了极为广泛的特性如持久化任务,集群和分布式任务等,其特点如下:

 

  • 完全由Java写成,方便集成(Spring)
  • 伸缩性
  • 负载均衡
  • 高可用性

Quartz数据库核心表如下:

 

Table Name Description
QRTZ_CALENDARS存储Quartz的Calendar信息
QRTZ_CRON_TRIGGERS存储CronTrigger,包括Cron表达式和时区信息
QRTZ_FIRED_TRIGGERS存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息
QRTZ_PAUSED_TRIGGER_GRPS存储已暂停的Trigger组的信息
QRTZ_SCHEDULER_STATE存储少量的有关Scheduler的状态信息,和别的Scheduler实例
QRTZ_LOCKS存储程序的悲观锁的信息
QRTZ_JOB_DETAILS存储每一个已配置的Job的详细信息
QRTZ_SIMPLE_TRIGGERS存储简单的Trigger,包括重复次数、间隔、以及已触的次数
QRTZ_BLOG_TRIGGERSTrigger作为Blob类型存储
QRTZ_TRIGGERS存储已配置的Trigger的信息

 

目前CUBE系统作业监控只是用到了上述加粗部分的表,其余表没有用到

 

Quartz的执行逻辑如下:

 



 

Quartz 任务调度的核心元素是 scheduler, trigger 和 job,其中 trigger 和 job 是任务调度的元数据, scheduler 是实际执行调度的控制器。

 

    Quartz 中,trigger 是用于定义调度时间的元素,即按照什么时间规则去执行任务。Quartz 中主要提供了四种类型的 trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,和 NthIncludedDayTrigger。这四种 trigger 可以满足企业应用中的绝大部分需求。我们将在企业应用一节中进一步讨论四种 trigger 的功能。

 

        Quartz 中,job 用于表示被调度的任务。主要有两种类型的 job:无状态的(stateless)和有状态的

(stateful)。对于同一个 trigger 来说,有状态的 job 不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行。Job 主要有两种属性:volatility 和 durability,其中 volatility 表示任务是否被持久化到数据库存储,而 durability 表示在没有 trigger 关联的时候任务是否被保留。两者都是在值为 true 的时候任务被持久化或保留。一个 job 可以被多个 trigger 关联,但是一个 trigger 只能关联一个 job。

 

     Quartz 中, scheduler 由 scheduler 工厂创建:DirectSchedulerFactory 或者 StdSchedulerFactory。 第二种工厂 StdSchedulerFactory 使用较多,因为 DirectSchedulerFactory 使用起来不够方便,需要作许多详细的手工编码设置。 Scheduler 主要有三种:RemoteMBeanScheduler, RemoteScheduler 和 StdScheduler。CUBE以最常用的 StdScheduler 实现。

 

说了很多Quartz的理论,就不在多说了,自己目前也就理解到这里了,下面是Quartz监控的代码

 

applicationContext-config.xml

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"  
  4.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  6.   
  7.     <context:annotation-config />  
  8.     <context:component-scan base-package="com.cube.*" />  
  9.     <bean id="entityManagerFactory"  
  10.         class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
  11.         <property name="persistenceUnitName" value="cube"></property>  
  12.         <!-- value 对应persistence.xml中的 persistence-unit name -->  
  13.     </bean>  
  14.   
  15.     <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
  16.         <property name="entityManagerFactory" ref="entityManagerFactory"  />  
  17.     </bean>  
  18.   
  19.     <!-- login action -->  
  20.   
  21.   
  22.     <tx:annotation-driven transaction-manager="txManager" />  
  23.   
  24. </beans>  

 

 

 applicationContext-quartz.xml

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"  
  4.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  6.   
  7.   
  8.     <bean name="quartzScheduler"  
  9.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  10.         <property name="dataSource" ref="dataSource" />  
  11.         <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />  
  12.         <property name="configLocation" value="classpath:quartz.properties" />  
  13.     </bean>  
  14.   
  15.     <bean name="jobDetail"  
  16.         class="org.springframework.scheduling.quartz.JobDetailFactoryBean">  
  17.           
  18.         <property name="jobClass">  
  19.             <value>com.cube.service.quartz.QuartzJobService</value>  
  20.         </property>  
  21.         <property name="durability" value="true" />  
  22.     </bean>  
  23.   
  24.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
  25.         destroy-method="close">  
  26.         <property name="driverClass" value="com.mysql.jdbc.Driver" />  
  27.         <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/cube?useUnicode=true&amp;characterEncoding=UTF8" />  
  28.         <property name="user" value="root" />  
  29.         <property name="password" value="" />  
  30.         <property name="initialPoolSize" value="10" />  
  31.         <property name="minPoolSize" value="10" />  
  32.         <property name="maxPoolSize" value="25" />  
  33.         <property name="acquireIncrement" value="5" />  
  34.         <property name="maxIdleTime" value="7200" />  
  35.     </bean>  
  36.   
  37. </beans>  

quartz.properties

 

Java代码   收藏代码
  1. org.quartz.scheduler.instanceName = DefaultQuartzScheduler  
  2. org.quartz.scheduler.rmi.export = false  
  3. org.quartz.scheduler.rmi.proxy = false  
  4. org.quartz.scheduler.wrapJobExecutionInUserTransaction = false  
  5.   
  6. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  
  7. org.quartz.threadPool.threadCount = 10  
  8. org.quartz.threadPool.threadPriority = 5  
  9. org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true  
  10.   
  11. org.quartz.jobStore.misfireThreshold = 60000  
  12.   
  13. org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX  
  14. org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate  
  15. org.quartz.jobStore.tablePrefix = QRTZ_    
  16. org.quartz.jobStore.isClustered = false    
  17. org.quartz.jobStore.maxMisfiresToHandleAtATime=1   

 

Schedule调度器Service

Java代码   收藏代码
  1. public interface SchedulerService {  
  2.   
  3.       
  4.     public List<Map<String, Object>> getQrtzTriggers();  
  5.       
  6.       
  7.   
  8.     /** 
  9.      * 根据 Quartz Cron Expression 调试任务 
  10.      *  
  11.      * @param name Quartz CronTrigger名称 
  12.      * @param group Quartz CronTrigger组 
  13.      * @param cronExpression Quartz Cron 表达式,如 "0/10 * * ? * * *"等 
  14.      */  
  15.     void schedule(String name, String group, String cronExpression);  
  16.   
  17.   
  18.     /** 
  19.      * 根据 Quartz Cron Expression 调试任务 
  20.      *  
  21.      * @param name Quartz CronTrigger名称 
  22.      * @param group Quartz CronTrigger组 
  23.      * @param cronExpression Quartz CronExpression 
  24.      */  
  25.     void schedule(String name, String group, CronExpression cronExpression);  
  26.       
  27.       
  28.     /** 
  29.      *  
  30.      * @param name Quartz CronTrigger名称 
  31.      * @param group Quartz CronTrigger组 
  32.      * @param cronExpression Quartz CronExpression 
  33.      */  
  34.     void schedule(String name, String group);  
  35.   
  36.   
  37.   
  38.     void schedule(Map<String, Object> map);  
  39.   
  40.     /** 
  41.      * 暂停触发器 
  42.      *  
  43.      * @param triggerName 触发器名称 
  44.      */  
  45.     void pauseTrigger(String triggerName);  
  46.   
  47.     /** 
  48.      * 暂停触发器 
  49.      *  
  50.      * @param triggerName 触发器名称 
  51.      * @param group 触发器组 
  52.      */  
  53.     void pauseTrigger(String triggerName, String group);  
  54.   
  55.     /** 
  56.      * 恢复触发器 
  57.      *  
  58.      * @param triggerName 触发器名称 
  59.      */  
  60.     void resumeTrigger(String triggerName);  
  61.   
  62.     /** 
  63.      * 恢复触发器 
  64.      *  
  65.      * @param triggerName 触发器名称 
  66.      * @param group 触发器组 
  67.      */  
  68.     void resumeTrigger(String triggerName, String group);  
  69.   
  70.     /** 
  71.      * 删除触发器 
  72.      *  
  73.      * @param triggerName 触发器名称 
  74.      * @return 
  75.      */  
  76.     boolean removeTrigdger(String triggerName);  
  77.   
  78.     /** 
  79.      * 删除触发器 
  80.      *  
  81.      * @param triggerName 触发器名称 
  82.      * @param group 触发器组 
  83.      * @return 
  84.      */  
  85.     boolean removeTrigdger(String triggerName, String group);  
  86.   
  87.   
  88. }  

 

Java代码   收藏代码
  1. @Transactional  
  2. @Service("schedulerService")  
  3. public class SchedulerServiceImpl implements SchedulerService {  
  4.   
  5.     @Resource(name = "quartzDao")  
  6.     private QuartzDao quartzDao;  
  7.   
  8.     @Autowired  
  9.     private Scheduler scheduler;  
  10.     @Autowired  
  11.     private JobDetail jobDetail;  
  12.   
  13.     private static final String NULLSTRING = null;  
  14.     private static final Date NULLDATE = null;  
  15.   
  16.     /** 
  17.      *  
  18.      * @param name 
  19.      * @param group 
  20.      * @param cronExpression 
  21.      * @see com.cube.service.SchedulerService#schedule(java.lang.String, java.lang.String, 
  22.      *      java.lang.String) 
  23.      */  
  24.     public void schedule(String name, String group, String cronExpression) {  
  25.   
  26.         try {  
  27.             schedule(name, group, new CronExpression(cronExpression));  
  28.   
  29.         } catch (ParseException e) {  
  30.             e.printStackTrace();  
  31.         }  
  32.   
  33.     }  
  34.   
  35.     /** 
  36.      * @param name 
  37.      * @param group 
  38.      * @param cronExpression 
  39.      * @see com.cube.service.SchedulerService#schedule(java.lang.String, java.lang.String, 
  40.      *      org.quartz.CronExpression) 
  41.      */  
  42.     public void schedule(String name, String group, CronExpression cronExpression) {  
  43.   
  44.         if (name == null || name.trim().equals("")) {  
  45.             name = UUID.randomUUID().toString();  
  46.         }  
  47.   
  48.         CronTriggerImpl trigger = new CronTriggerImpl();  
  49.         trigger.setCronExpression(cronExpression);  
  50.   
  51.         TriggerKey triggerKey = new TriggerKey(name, group);  
  52.   
  53.         trigger.setJobName(jobDetail.getKey().getName());  
  54.         trigger.setKey(triggerKey);  
  55.   
  56.         try {  
  57.             scheduler.addJob(jobDetail, true);  
  58.             if (scheduler.checkExists(triggerKey)) {  
  59.                 scheduler.rescheduleJob(triggerKey, trigger);  
  60.             } else {  
  61.                 scheduler.scheduleJob(trigger);  
  62.             }  
  63.         } catch (SchedulerException e) {  
  64.             throw new IllegalArgumentException(e);  
  65.         }  
  66.   
  67.     }  
  68.   
  69.     /** 
  70.      * @param map 
  71.      * @see com.cube.service.SchedulerService#schedule(java.util.Map) 
  72.      */  
  73.     public void schedule(Map<String, Object> map) {  
  74.         // TODO Auto-generated method stub  
  75.   
  76.     }  
  77.   
  78.     /** 
  79.      * @param triggerName 
  80.      * @see com.cube.service.SchedulerService#pauseTrigger(java.lang.String) 
  81.      */  
  82.     public void pauseTrigger(String triggerName) {  
  83.         // TODO Auto-generated method stub  
  84.   
  85.     }  
  86.   
  87.     /** 
  88.      * @param triggerName 
  89.      * @param group 
  90.      * @see com.cube.service.SchedulerService#pauseTrigger(java.lang.String, java.lang.String) 
  91.      */  
  92.     public void pauseTrigger(String triggerName, String group) {  
  93.   
  94.         try {  
  95.             scheduler.pauseTrigger(new TriggerKey(triggerName, group));  
  96.         } catch (SchedulerException e) {  
  97.             e.printStackTrace();  
  98.         }  
  99.     }  
  100.   
  101.     /** 
  102.      * @param triggerName 
  103.      * @see com.cube.service.SchedulerService#resumeTrigger(java.lang.String) 
  104.      */  
  105.     public void resumeTrigger(String triggerName) {  
  106.         // TODO Auto-generated method stub  
  107.   
  108.     }  
  109.   
  110.     /** 
  111.      * @param triggerName 
  112.      * @param group 
  113.      * @see com.cube.service.SchedulerService#resumeTrigger(java.lang.String, java.lang.String) 
  114.      */  
  115.     public void resumeTrigger(String triggerName, String group) {  
  116.   
  117.         TriggerKey triggerKey = new TriggerKey(triggerName, group);  
  118.   
  119.         try {  
  120.             scheduler.resumeTrigger(triggerKey);  
  121.         } catch (SchedulerException e) {  
  122.             e.printStackTrace();  
  123.         }  
  124.     }  
  125.   
  126.     /** 
  127.      * @param triggerName 
  128.      * @return 
  129.      * @see com.cube.service.SchedulerService#removeTrigdger(java.lang.String) 
  130.      */  
  131.     public boolean removeTrigdger(String triggerName) {  
  132.   
  133.         return removeTrigdger(triggerName, NULLSTRING);  
  134.   
  135.     }  
  136.   
  137.     /** 
  138.      * @param triggerName 
  139.      * @param group 
  140.      * @return 
  141.      * @see com.cube.service.SchedulerService#removeTrigdger(java.lang.String, java.lang.String) 
  142.      */  
  143.     public boolean removeTrigdger(String triggerName, String group) {  
  144.   
  145.         TriggerKey triggerKey = new TriggerKey(triggerName, group);  
  146.         try {  
  147.             scheduler.pauseTrigger(triggerKey);// 停止触发器  
  148.             return scheduler.unscheduleJob(triggerKey);// 移除触发器  
  149.         } catch (SchedulerException e) {  
  150.             throw new RuntimeException(e);  
  151.         }  
  152.     }  
  153.   
  154.     /** 
  155.      * @return 
  156.      * @see com.cube.service.SchedulerService#getQrtzTriggers() 
  157.      */  
  158.     public List<Map<String, Object>> getQrtzTriggers() {  
  159.         return quartzDao.getQrtzTriggers();  
  160.     }  
  161.   
  162.     /** 
  163.      * @param name 
  164.      * @param group 
  165.      * @see com.cube.service.SchedulerService#schedule(java.lang.String, java.lang.String) 
  166.      */  
  167.     public void schedule(String name, String group) {  
  168.   
  169.         schedule(name, group, NULLSTRING);  
  170.     }  
  171.   
  172. }  

 

QuartzDao,主要负责查询触发器的状态信息

 

Java代码   收藏代码
  1. @Repository("quartzDao")  
  2. public class QuartzDao {  
  3.   
  4.     private DataSource dataSource;  
  5.   
  6.     @Autowired  
  7.     public void setDataSource(@Qualifier("dataSource") DataSource dataSource) {  
  8.         this.dataSource = dataSource;  
  9.     }  
  10.   
  11.     // 查询Trigger  
  12.     public List<Map<String, Object>> getQrtzTriggers() {  
  13.         List<Map<String, Object>> results = getJdbcTemplate().queryForList(  
  14.                 "select * from QRTZ_TRIGGERS order by start_time");  
  15.         long val = 0;  
  16.         String temp = null;  
  17.         for (Map<String, Object> map : results) {  
  18.             temp = MapUtils.getString(map, "trigger_name");  
  19.             if (StringUtils.indexOf(temp, "&") != -1) {  
  20.                 map.put("display_name", StringUtils.substringBefore(temp, "&"));  
  21.             } else {  
  22.                 map.put("display_name", temp);  
  23.             }  
  24.   
  25.             val = MapUtils.getLongValue(map, "next_fire_time");  
  26.             if (val > 0) {  
  27.                 map.put("next_fire_time", DateFormatUtils.format(val, "yyyy-MM-dd HH:mm:ss"));  
  28.             }  
  29.   
  30.             val = MapUtils.getLongValue(map, "prev_fire_time");  
  31.             if (val > 0) {  
  32.                 map.put("prev_fire_time", DateFormatUtils.format(val, "yyyy-MM-dd HH:mm:ss"));  
  33.             }  
  34.   
  35.             val = MapUtils.getLongValue(map, "start_time");  
  36.             if (val > 0) {  
  37.                 map.put("start_time", DateFormatUtils.format(val, "yyyy-MM-dd HH:mm:ss"));  
  38.             }  
  39.   
  40.             val = MapUtils.getLongValue(map, "end_time");  
  41.             if (val > 0) {  
  42.                 map.put("end_time", DateFormatUtils.format(val, "yyyy-MM-dd HH:mm:ss"));  
  43.             }  
  44.   
  45.             map.put("trigger_state", Constant.status.get(MapUtils.getString(map, "trigger_state")));  
  46.         }  
  47.   
  48.         return results;  
  49.     }  
  50.   
  51.     private JdbcTemplate getJdbcTemplate() {  
  52.         return new JdbcTemplate(this.dataSource);  
  53.     }  
  54. }  

 

JobClass

 

Java代码   收藏代码
  1. public class QuartzJobService extends QuartzJobBean {  
  2.   
  3.     // 负责所有任务的调度  
  4.     private TaskService taskService;  
  5.   
  6.     /** 
  7.      * @param context 
  8.      * @throws JobExecutionException 
  9.      * @see org.springframework.scheduling.quartz.QuartzJobBean#executeInternal(org.quartz.JobExecutionContext) 
  10.      */  
  11.     @Override  
  12.     protected void executeInternal(JobExecutionContext context) throws JobExecutionException {  
  13.   
  14.         String triggerName = context.getTrigger().getKey().getName();  
  15.   
  16.         taskService = (TaskService) getApplicationContext(context).getBean("taskService");  
  17.   
  18.         taskService.execute(triggerName);  
  19.   
  20.     }  
  21.   
  22.     private ApplicationContext getApplicationContext(final JobExecutionContext jobexecutioncontext) {  
  23.         try {  
  24.             return (ApplicationContext) jobexecutioncontext.getScheduler().getContext()  
  25.                     .get("applicationContextKey");  
  26.         } catch (SchedulerException e) {  
  27.             throw new RuntimeException(e);  
  28.         }  
  29.     }  
  30.   
  31. }  

 

TaskService,负责所有任务的调用

 

Java代码   收藏代码
  1. public interface TaskService {  
  2.   
  3.   
  4.     /** 
  5.      * @param triggerName 
  6.      */  
  7.     public void execute(String triggerName);  
  8. }  

 

Java代码   收藏代码
  1. @Transactional  
  2. @Service("taskService")  
  3. public class TaskServiceImpl implements TaskService {  
  4.   
  5.     //此处注入自己业务的Service  
  6.     @Resource(name = "reportService")  
  7.     private ReportService reportService;  
  8.   
  9.     /** 
  10.      * 根据TriggerName 调用不同的业务逻辑service 
  11.      *  
  12.      * @param triggerName 
  13.      * @see com.cube.service.TaskService#execute(java.lang.String) 
  14.      */  
  15.     public void execute(String triggerName) {  
  16.   
  17.         //此处根据触发器名称调用相应的业务逻辑Service  
  18.         if ("reportTigger".equalsIgnoreCase(triggerName)) {  
  19.   
  20.             reportService.createReport();  
  21.         } else {  
  22.             System.out.println(triggerName + ":企业业务逻辑");  
  23.         }  
  24.   
  25.     }  
  26.   
  27. }  

 

下面是Action类的实现,负责添加、删除、暂停、恢复Trigger

 

Java代码   收藏代码
  1. @Controller  
  2. @Scope("prototype")  
  3. public class TriggerAction extends BaseAction<TriggerEntity> {  
  4.   
  5.     /**  */  
  6.     private static final long serialVersionUID = -3326354633384499660L;  
  7.   
  8.     private TriggerEntity triggerEntity = getModel();  
  9.   
  10.     private Map jsonMap = new HashMap();  
  11.   
  12.     @Resource(name = "schedulerService")  
  13.     private SchedulerService schedulerService;  
  14.   
  15.     /** 
  16.      * 跳转到tigger 管理界面 
  17.      *  
  18.      * @return 
  19.      */  
  20.     public String trigger() {  
  21.   
  22.         return "trigger";  
  23.     }  
  24.   
  25.     /** 
  26.      * 分页查询Trigger 
  27.      *  
  28.      * @return 
  29.      */  
  30.     public String list() {  
  31.   
  32.         List<Map<String, Object>> list = schedulerService.getQrtzTriggers();  
  33.   
  34.         jsonMap.put("rows", list);  
  35.         jsonMap.put("total", list.size());  
  36.         return "list";  
  37.     }  
  38.   
  39.     /** 
  40.      * 添加触发器 
  41.      *  
  42.      * @return 
  43.      */  
  44.     public String save() {  
  45.   
  46.         // 获取界面以参数  
  47.         String triggerName = triggerEntity.getTrigger_name();  
  48.         String cronExpression = triggerEntity.getCron();  
  49.         String group = triggerEntity.getTrigger_group();  
  50.   
  51.         schedulerService.schedule(triggerName, group, cronExpression);  
  52.   
  53.         jsonMap.put("flag"true);  
  54.   
  55.         return "save";  
  56.     }  
  57.   
  58.     /** 
  59.      * 暂停 
  60.      *  
  61.      * @return 
  62.      */  
  63.     public String pause() {  
  64.   
  65.         schedulerService.pauseTrigger(triggerEntity.getTrigger_name(),  
  66.                 triggerEntity.getTrigger_group());  
  67.   
  68.         jsonMap.put("flag"true);  
  69.   
  70.         return "pause";  
  71.     }  
  72.   
  73.     /** 
  74.      * Trigger恢复 
  75.      *  
  76.      * @return 
  77.      */  
  78.     public String play() {  
  79.         schedulerService.resumeTrigger(triggerEntity.getTrigger_name(),  
  80.                 triggerEntity.getTrigger_group());  
  81.           
  82.         jsonMap.put("flag"true);  
  83.         return "play";  
  84.     }  
  85.   
  86.     /** 
  87.      * 删除 
  88.      *  
  89.      * @return 
  90.      */  
  91.     public String deleteTrigger() {  
  92.   
  93.         schedulerService.removeTrigdger(triggerEntity.getTrigger_name(),  
  94.                 triggerEntity.getTrigger_group());  
  95.   
  96.         jsonMap.put("flag"true);  
  97.   
  98.         return "deleteTrigger";  
  99.     }  
  100.   
  101.     public Map getJsonMap() {  
  102.         return jsonMap;  
  103.     }  
  104.   
  105.     public void setJsonMap(Map jsonMap) {  
  106.         this.jsonMap = jsonMap;  
  107.     }  
  108.   
  109. }  

 

到此,作业监控功能就实现了,当然实现方式不止这一种,希望有别的实现大家可以共享一下吧,互相学习!!

下载地址:http://download.csdn.net/detail/zhouhua0104/9611192

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Spring Boot和Quartz实现定时任务管理,可以让你更方便地管理监控你的定时任务。下面是一个使用Spring Boot、QuartzSpring MVC实现定时任务管理的示例: 首先,在你的Spring Boot应用程序中添加QuartzSpring MVC的依赖项: ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 然后,在你的Spring Boot应用程序中创建一个Quartz的调度器,并添加一个Spring MVC的Controller来管理定时任务: ```java @Configuration public class QuartzConfig { @Bean public SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setTriggers(myTaskTrigger().getObject()); return schedulerFactoryBean; } @Bean public JobDetailFactoryBean myTaskJob() { JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean(); jobDetailFactoryBean.setJobClass(MyTask.class); return jobDetailFactoryBean; } @Bean public CronTriggerFactoryBean myTaskTrigger() { CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean(); cronTriggerFactoryBean.setJobDetail(myTaskJob().getObject()); cronTriggerFactoryBean.setCronExpression("0/5 * * * * ?"); // 每5秒执行一次 return cronTriggerFactoryBean; } } @RestController public class TaskController { @Autowired private Scheduler scheduler; @PostMapping("/tasks") public void addTask(@RequestBody TaskInfo taskInfo) throws SchedulerException { JobDetail jobDetail = JobBuilder.newJob(taskInfo.getJobClass()) .withIdentity(taskInfo.getJobName(), taskInfo.getJobGroup()) .build(); CronTrigger trigger = TriggerBuilder.newTrigger() .withIdentity(taskInfo.getTriggerName(), taskInfo.getTriggerGroup()) .withSchedule(CronScheduleBuilder.cronSchedule(taskInfo.getCronExpression())) .build(); scheduler.scheduleJob(jobDetail, trigger); } @DeleteMapping("/tasks/{jobName}/{jobGroup}") public void deleteTask(@PathVariable String jobName, @PathVariable String jobGroup) throws SchedulerException { JobKey jobKey = new JobKey(jobName, jobGroup); scheduler.deleteJob(jobKey); } } ``` 在上面的代码中,我们创建了一个Spring MVC的Controller来管理定时任务。我们使用了Scheduler类来添加和删除定时任务。在添加定时任务时,我们使用了TaskInfo类来封装定时任务的信息。在删除定时任务时,我们使用了jobName和jobGroup来识别定时任务。 最后,在你的定时任务类中实现Job接口,并在类上添加@DisallowConcurrentExecution注解,以确保每个任务执行时只有一个实例: ```java @Component @DisallowConcurrentExecution public class MyTask implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 定时任务执行的代码 } } ``` 以上就是使用Spring Boot、QuartzSpring MVC实现定时任务管理的示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值