现在系统里面的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> <span><span style="line-height:17.27272605895996px;"> </span></span>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
核心代码:
// 得到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;
}