打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SpringBoot之旅

相关文章

Spring Boot 相关文章目录

前言

最近在项目中使用到定时任务,之前一直都是使用Quartz 来实现,最近看Spring 基础发现其实Spring 提供 Spring Schedule 可以帮助我们实现简单的定时任务功能。
下面说一下两种方式在Spring Boot 项目中的使用。

Spring Schedule 实现定时任务

Spring Schedule 实现定时任务有两种方式 1. 使用XML配置定时任务, 2. 使用 @Scheduled 注解。 因为是Spring Boot 项目 可能尽量避免使用XML配置的形式,主要说注解的形式.

Spring Schedule 提供三种形式的定时任务:

固定等待时间 @Scheduled(fixedDelay = 时间间隔 )

@Componentpublic class ScheduleJobs {    public final static long SECOND = 1 * 1000;    FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");    @Scheduled(fixedDelay = SECOND * 2)    public void fixedDelayJob() throws InterruptedException {        TimeUnit.SECONDS.sleep(2);        System.out.println("[FixedDelayJob Execute]"+fdf.format(new Date()));    }}

固定间隔时间 @Scheduled(fixedRate = 时间间隔 )

@Componentpublic class ScheduleJobs {    public final static long SECOND = 1 * 1000;    FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");    @Scheduled(fixedRate = SECOND * 4)    public void fixedRateJob() {        System.out.println("[FixedRateJob Execute]"+fdf.format(new Date()));    }}

Corn表达式 @Scheduled(cron = Corn表达式)

@Componentpublic class ScheduleJobs {    public final static long SECOND = 1 * 1000;    FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");    @Scheduled(cron = "0/4 * * * * ?")    public void cronJob() {        System.out.println("[CronJob Execute]"+fdf.format(new Date()));    }}

Spring Boot 整合 Quartz 实现定时任务

添加Maven依赖

        <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz</artifactId>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>        </dependency>

Spring Boot 整合 Quartz

Spring 项目整合 Quartz 主要依靠添加 SchedulerFactoryBean 这个 FactoryBean ,所以在maven 依赖中添加 spring-context-support 。

首先添加 QuartzConfig 类 来声明相关Bean

@Configurationpublic class QuartzConfig {    @Autowired    private SpringJobFactory springJobFactory;    @Bean    public SchedulerFactoryBean schedulerFactoryBean() {        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();        schedulerFactoryBean.setJobFactory(springJobFactory);        return schedulerFactoryBean;    }    @Bean    public Scheduler scheduler() {        return schedulerFactoryBean().getScheduler();    }}

这里我们需要注意 我注入了一个 自定义的JobFactory ,然后 把其设置为SchedulerFactoryBean 的 JobFactory。其目的是因为我在具体的Job 中 需要Spring 注入一些Service。
所以我们要自定义一个jobfactory, 让其在具体job 类实例化时 使用Spring 的API 来进行依赖注入。

SpringJobFactory 具体实现:

@Componentpublic class SpringJobFactory extends AdaptableJobFactory {    @Autowired    private AutowireCapableBeanFactory capableBeanFactory;    @Override    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {        Object jobInstance = super.createJobInstance(bundle);        capableBeanFactory.autowireBean(jobInstance);        return jobInstance;    }}

具体使用 (摘取自项目代码):

@Servicepublic class QuartzEventServiceImpl implements QuartzEventService {    private static final String JOB_GROUP = "event_job_group";    private static final String TRIGGER_GROUP = "event_trigger_group";    @Autowired    private Scheduler scheduler;    @Override    public void addQuartz(Event event) throws SchedulerException {        JSONObject eventData = JSONObject.parseObject(event.getEventData());        Date triggerDate = eventData.getDate("date");        JobDetail job = JobBuilder.newJob(EventJob.class).withIdentity(event.getId().toString(), JOB_GROUP).usingJobData(buildJobDateMap(event)).build();        Trigger trigger = TriggerBuilder.newTrigger().withIdentity(event.getId().toString(), TRIGGER_GROUP).startAt(triggerDate).build();        scheduler.scheduleJob(job, trigger);    }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring 自动定时任务配置
Spring 整合Quartz 2实现定时任务四:细化调整及一些已知的问题
Quartz实现动态定时任务
quartz与springboot整合无法暂停job问题
spring任务调度--Quartz(石英)详解 - spring
spring Quartz配置
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服