spring动态管理quartz的方法

发布于 2021-11-21 23:13:01 字数 1856 浏览 764 评论 2

现在系统里面的quartz是通过spring配置手动调用的,具体配置如下所示; 现在我需要做一个控制界面,手动对worker进行管理,比如手动启动某个worker,或者停止某个worker(不再继续调度)。求大神指导SchedulerFactoryBean如何对注册的worker进行控制?


<!-- 要调用的工作类 --> 
     <bean id="hotModuleJob" class="com.mycom.worker.HotModuleWorkerService"></bean> 
     <!-- 定义调用对象和调用对象的方法 --> 
     <bean id="hotModuleTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
         <!-- 调用的类 --> 
         <property name="targetObject"> 
             <ref bean="hotModuleJob"/> 
         </property> 
         <!-- 调用类中的方法 --> 
         <property name="targetMethod"> 
             <value>startTask</value> 
         </property> 
     </bean> 
     <!-- 定义触发时间 --> 
     <bean id="doHotModuleTime" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
         <property name="jobDetail"> 
             <ref bean="hotModuleTask"/> 
         </property> 
         <!-- cron表达式 --> 
         <property name="cronExpression"> 
             <value>0/30 * * * * ?</value> 
         </property> 
     </bean> 
     
     
 
     
     
     
     <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  --> SchedulerFactoryBean
     <bean id="schedulerFactoryBean" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
         <property name="triggers"> 
             <list> 
                 <ref bean="doHotModuleTime"/>
             </list> 
         </property>
         <property name="startupDelay" value="180"></property> <!--系统启动后, 延迟3分钟启动调度 -->
     </bean>  


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谁的新欢旧爱 2021-11-23 19:58:03

核心代码:

// 得到trigger
			CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
				triggerName, Scheduler.DEFAULT_GROUP);
//设置表达式
			trigger.setCronExpression(cronExpression);
// 重置job
			scheduler.rescheduleJob(triggerName, Scheduler.DEFAULT_GROUP, trigger);
/**
 * 列出在运行的触发器
 * @return
 */
 public String[] listTrigger(){
 String[] triggers = new String[]{};
 String[] triggerGroups = new String[]{};
 try {
 triggerGroups = scheduler.getTriggerGroupNames();
    for (int i = 0; i < triggerGroups.length; i++) {
       triggers = scheduler.getTriggerNames(triggerGroups[i]);
    }
 } catch (SchedulerException e) {
 e.printStackTrace();
 }    
 return triggers;
 }
/**
 * 根据触发器得到表达式
 * @param triggerName
 * @return
 */
 public String takeCronByTriggerName(String triggerName){
 String cron = "";
 try {
 CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
 triggerName, Scheduler.DEFAULT_GROUP);
 cron = trigger.getCronExpression();
 } catch (SchedulerException e) {
 e.printStackTrace();
 }
 return cron;
 }
/**
 * 根据触发器得到任务运行状态
 * @param triggerName
 * @return
 */
 public int takeStateByTriggerName(String triggerName){
 int state = 0 ;
 try {
 state = scheduler.getTriggerState(triggerName, Scheduler.DEFAULT_GROUP);
 } catch (SchedulerException e) {
 e.printStackTrace();
 }
 return state;
 }
/**
 * 开关任务
 * @param type 1:关闭任务  2:开启任务
 * @param triggerName
 * @param cronExpression
 * @return
 */
 public boolean controlTrigger(String type,String triggerName,String cronExpression){
 boolean flag = false;
 try {
 if("1".equals(type)){
 String[] triggerGroups = new String[]{};
 triggerGroups = scheduler.getTriggerGroupNames();
    for (int i = 0; i < triggerGroups.length; i++) {
    	// 停止job
    	scheduler.pauseTrigger(triggerName, triggerGroups[i]);
    }
 }else{
 // 重启job
 scheduler.resumeTrigger(triggerName, Scheduler.DEFAULT_GROUP);
 }
 flag = true;
 } catch (SchedulerException e) {
 e.printStackTrace();
 } 
 return flag;
 }

带上头具痛哭 2021-11-22 18:11:35

核心代码:

// 得到trigger
			CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
				triggerName, Scheduler.DEFAULT_GROUP);
//设置表达式
			trigger.setCronExpression(cronExpression);
// 重置job
			scheduler.rescheduleJob(triggerName, Scheduler.DEFAULT_GROUP, trigger);
/**
 * 列出在运行的触发器
 * @return
 */
 public String[] listTrigger(){
 String[] triggers = new String[]{};
 String[] triggerGroups = new String[]{};
 try {
 triggerGroups = scheduler.getTriggerGroupNames();
    for (int i = 0; i < triggerGroups.length; i++) {
       triggers = scheduler.getTriggerNames(triggerGroups[i]);
    }
 } catch (SchedulerException e) {
 e.printStackTrace();
 }    
 return triggers;
 }
/**
 * 根据触发器得到表达式
 * @param triggerName
 * @return
 */
 public String takeCronByTriggerName(String triggerName){
 String cron = "";
 try {
 CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
 triggerName, Scheduler.DEFAULT_GROUP);
 cron = trigger.getCronExpression();
 } catch (SchedulerException e) {
 e.printStackTrace();
 }
 return cron;
 }
/**
 * 根据触发器得到任务运行状态
 * @param triggerName
 * @return
 */
 public int takeStateByTriggerName(String triggerName){
 int state = 0 ;
 try {
 state = scheduler.getTriggerState(triggerName, Scheduler.DEFAULT_GROUP);
 } catch (SchedulerException e) {
 e.printStackTrace();
 }
 return state;
 }
/**
 * 开关任务
 * @param type 1:关闭任务  2:开启任务
 * @param triggerName
 * @param cronExpression
 * @return
 */
 public boolean controlTrigger(String type,String triggerName,String cronExpression){
 boolean flag = false;
 try {
 if("1".equals(type)){
 String[] triggerGroups = new String[]{};
 triggerGroups = scheduler.getTriggerGroupNames();
    for (int i = 0; i < triggerGroups.length; i++) {
    	// 停止job
    	scheduler.pauseTrigger(triggerName, triggerGroups[i]);
    }
 }else{
 // 重启job
 scheduler.resumeTrigger(triggerName, Scheduler.DEFAULT_GROUP);
 }
 flag = true;
 } catch (SchedulerException e) {
 e.printStackTrace();
 } 
 return flag;
 }

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文