package com.app.mvc.schedule; import com.app.mvc.common.SpringHelper; import com.app.mvc.util.ClassUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import java.lang.reflect.Method; import java.util.List; /** * Created by jimin on 16/5/9. */ @Slf4j public class AutoRegisterScheduleJob { public static void registerWhenStartUp() { log.info("auto register schedule job start"); ScheduleJobSettingDao scheduleJobSettingDao = SpringHelper.popBean(ScheduleJobSettingDao.class); List<Class> clazzList = ClassUtil.getSubClassList(AbstractScheduleJob.class, "com.app.mvc"); if (CollectionUtils.isEmpty(clazzList)) { return; } for (Class clazz : clazzList) { String className = clazz.getName(); if (scheduleJobSettingDao.countByClassPath(className) == 0) { try { Object instance = clazz.newInstance(); // 此处需要使用实例化后的对象去invoke才能拿到方法的返回值 Method scheduleIdMethod = clazz.getDeclaredMethod("scheduleId"); Method groupIdMethod = clazz.getDeclaredMethod("groupId"); log.info("find a new schedule job to register, {}", className); ScheduledJobSetting setting = ScheduledJobSetting.builder().groupId((String) groupIdMethod.invoke(instance)) .scheduleId((String) scheduleIdMethod.invoke(instance)).classPath(className).build(); scheduleJobSettingDao.save(setting); } catch (Throwable t) { log.error("auto register schedule job exception, name: " + className, t); } } } log.info("auto register schedule job end"); } }