栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring更新计划

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring更新计划

为了解决这个问题,我创建了一个SchedulerOrchestrator来管理我的工作。作业包含SchedulerFuture。

我希望这里的代码可以对其他人有所帮助。

让我们从将由我的工作实现的接口开始:

public interface SchedulerObjectInterface {        void start();    void stop();}

每个作业都需要一个ScheduledFuture才能停止,并且需要自动连接一个TaskScheduler进行计划。这里是一份工作的示例(您可以创建任意数量的工作):

@Componentpublic class MyFirstJob implements SchedulerObjectInterface {    private static final Logger log = LoggerFactory.getLogger(MyFirstJob.class);    public static final String JOB = "MyFirstJob";    @Autowired    JobRepository jobRepository;    private ScheduledFuture future;    @Autowired    private TaskScheduler scheduler;    @Override    public void start() {        future = scheduler.schedule(new Runnable() { @Override public void run() {     System.out.println(JOB + "  Hello World! " + new Date()); }        }, new Trigger() { @Override public Date nextExecutionTime(TriggerContext triggerContext) {     String cron = cronConfig();     System.out.println(cron);     CronTrigger trigger = new CronTrigger(cron);     return trigger.nextExecutionTime(triggerContext); }        });    }    @Override    public void stop() {        future.cancel(false);    }    // retrieve cron from database    private String cronConfig() {        JobScheduled byJobNameIgnoreCase = jobRepository.findByJobNameIgnoreCase(JOB);        return byJobNameIgnoreCase.getCrontab();    }}

最后,我们可以将工作添加到协调器中:

@Configurationpublic class SchedulerOrchestrator {    private static final Logger log = LoggerFactory.getLogger(SchedulerOrchestrator.class);    private static Map<String, SchedulerObjectInterface> schduledJobsMap = new HashMap<>();    @Autowired    JobRepository jobRepository;    @Autowired    MyFirstJob myFirstJob;    @Autowired    MySecondJob mySecondJob;    @Autowired    TaskScheduler scheduler;    @PostConstruct    public void initScheduler() {        schduledJobsMap.put(MyFirstJob.JOB, myFirstJob);        schduledJobsMap.put(MySecondJob.JOB, mySecondJob);        startAll();    }    public void restart(String job) {        stop(job);        start(job);    }    public void stop(String job) {        schduledJobsMap.get(job).stop();    }    public void start(String job) {        schduledJobsMap.get(job).start();    }    public void startAll() {        for (SchedulerObjectInterface schedulerObjectInterface : schduledJobsMap.values()) { schedulerObjectInterface.start();        }    }    @Bean    public TaskScheduler scheduler() {        return new ThreadPoolTaskScheduler();    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号