我们使用quartz定时任务时,有手动触发执行任务的需要。此时,可以按照下面的方式触发定时任务立即执行。
public interface QuartzService {
void quartzTrig(String jobName);
}
@Slf4j
@Service
public class QuartzServiceImpl implements QuartzService {
@Autowired
private ApplicationContext applicationContext;
@Override
public void quartzTrig(String jobName) {
if (!StringUtils.hasText(jobName)) {
log.error("parameter:jobName cannot be null or empty!");
return;
}
Method[] methods = QuartzConfig.class.getDeclaredMethods();
for (Method method : methods) {
boolean present = method.isAnnotationPresent(Bean.class);
if (present) {
if ("org.springframework.scheduling.quartz.CronTriggerFactoryBean"
.equals(method.getGenericReturnType().getTypeName())) {
String[] values = method.getAnnotation(Bean.class).value();
if (values.length == 1) {
String beanName = values[0];
Object bean = applicationContext.getBean(beanName);
if (bean instanceof CronTriggerImpl) {
CronTriggerImpl trigger = (CronTriggerImpl) bean;
if (jobName.equals(trigger.getJobName())) {
try {
SchedulerFactoryBean factoryBean = applicationContext.getBean(SchedulerFactoryBean.class);
JobKey jobKey = new JobKey(trigger.getJobName());
Scheduler scheduler = factoryBean.getScheduler();
scheduler.triggerJob(jobKey);
log.info("Trig job[{}] success!", jobName);
} catch (Exception e) {
log.error("Trig job[{}] error!", jobName, e);
}
}
}
}
}
}
}
}
}



