1.@JobHandler注解 实现IJobHandler接口 定义一个接口
2. ExecutorInit这个类实现了CommandLineRunner接口会在springboot启动后收集@JobHandler注解,将其注册到JobRegistry这个类中。
public void run(String... args) throws Exception {
this.scanJobHandler();
ThreadFactory threadFactory = (new ThreadFactoryBuilder()).setNameFormat("scheduler-register-runner-%d").build();
ExecutorService executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), threadFactory);
executor.execute(new ExecutorInit.Registry());
}
private void scanJobHandler() {
Map<String, Object> map = ApplicationContextHelper.getContext().getBeansWithAnnotation(JobHandler.class);
Iterator var2 = map.values().iterator();
while(var2.hasNext()) {
Object service = var2.next();
if (service instanceof IJobHandler) {
JobHandler jobHandler = (JobHandler)ProxyUtils.getUserClass(service).getAnnotation(JobHandler.class);
if (ObjectUtils.isEmpty(jobHandler)) {
logger.debug("could not get target bean , jobHandler : {}", service);
} else {
JobRegistry.addJobHandler(jobHandler.value(), service);
}
}
}
}