实现Runnable的接口,调用方法,如何调用多个配置项

1.预期接口,通过http调用外部接口

2.配置项有url,request,response,每次调用成功后,根据要求保存响应

3.一开始可能只有3个配置,后续要扩展,配置新增后,要求能读取到新的配置,但是代码还是这一个

 

这个该如何实现呢,我现在是通过将数据库读取到内存,但是后果就是每次只能使用最新的配置,无法读取老的

,使用的是如下技术:

 

ScheduledFuture<?> future = threadPoolTaskScheduler.schedule(getRunnable(scheduleConfigBO), getTrigger(scheduleConfigBO));


  private Runnable getRunnable(ScheduleConfigBO config) {
        return new Runnable() {
            @Override
            public void run() {
                Class<?> clazz;
                // 如果 status 是0 代表暂停 跳过任务
                if (config.getStatus().intValue() == 1) {
                    try {
                        // 这里通过反射调用方法
                        clazz = Class.forName(config.getClassName());
                        String className = lowerFirstCapse(clazz.getSimpleName());
                        Object bean = ApplicationContextHelper.getBean(className);
                        Method method = ReflectionUtils.findMethod(bean.getClass(), "run");
                        ReflectionUtils.invokeMethod(method, bean);
                    } catch (ClassNotFoundException e) {
                        LOGGER.error("invoke  class: {} has an error ", config.getClassName());
                    }
                }
            }
        };
    }



 private Trigger getTrigger(ScheduleConfigBO scheduleConfigBO) {
        return new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                CronTrigger trigger = new CronTrigger(scheduleConfigBO.getTaskCron());
                Date nextExec = trigger.nextExecutionTime(triggerContext);
                return nextExec;
            }
        };

    }




/**
 * 数据库表为schedule_setting
 */
@Data
public class ScheduleConfigBO {

    /**
     * 任务名 唯一
     */
    private String taskName;
    /**
     * 任务描述
     */
    private String taskDesc;
    /**
     * 任务表达式
     */
    private String taskCron;

    /**
     * 1 代表开启,0代表关闭
     */
    private Integer status;
    /**
     * 调用类
     */
    private String className;
    /**
     * 需要外部调用的url地址
     */
    private String url;
    /**
     * 需要外部调用的请求(json)
     */
    private String request;
    /**
     * 是否启动标识
     */
    private Boolean startFlag;

}

 

本人已经实现,通过反射,带入bean,方法,以及入参

private Runnable getRunnable(ScheduleConfigBO config) {
        return new Runnable() {
            @Override
            public void run() {
                Class<?> clazz;
                // 如果 status 是0 代表暂停 跳过任务
                if (config.getStatus().intValue() == 1) {
                    try {
                        // 这里通过反射调用方法,带入ScheduleConfigBO的参数
                        clazz = Class.forName(config.getClassName());
                        String className = lowerFirstCapse(clazz.getSimpleName());
                        Object bean = ApplicationContextHelper.getBean(className);
                        Method method = ReflectionUtils.findMethod(bean.getClass(), "run", ScheduleConfigBO.class);
                        ReflectionUtils.invokeMethod(method, bean, config);
                    } catch (ClassNotFoundException e) {
                        LOGGER.error("invoke  class: {} has an error ", config.getClassName());
                    }
                }
            }
        };
    }