Java之SpringBoot定时任务案例讲解

下面是关于“Java之SpringBoot定时任务案例讲解”的完整攻略。

简介

在实际的项目中,我们时常需要定时执行一些任务,比如数据统计、数据备份、消息通知等。SpringBoot提供了很好的定时任务支持,本文将着重介绍如何使用SpringBoot实现定时任务,并提供两个示例。

步骤

1.依赖添加

pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
</dependency>

2.任务实现

任务实现类需要继承QuartzJobBean类,并实现其中的executeInternal方法。下面是一个简单的示例:

@Component
public class SimpleJob extends QuartzJobBean{

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Simple Job执行");
    }
}

3.任务调度

在SpringBoot项目中,可以通过注解方式进行任务调度。下面是通过注解方式实现任务调度的示例:

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail simpleJobDetail() {
        return JobBuilder.newJob(SimpleJob.class)
                .withIdentity("simpleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger simpleJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5)
                .repeatForever();

        return TriggerBuilder.newTrigger()
                .forJob(simpleJobDetail())
                .withIdentity("simpleJobTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }
}

上述代码中,通过simpleJobDetail()方法定义了SimpleJob实现类的细节信息,并返回JobDetail类型的对象。通过simpleJobTrigger()方法定义了任务触发器的执行策略和执行逻辑,并返回Trigger类型的对象。

4.任务启动

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

        Scheduler scheduler = (Scheduler) context.getBean("schedulerFactoryBean");

        scheduler.start();
    }
}

在上述的代码片段中,通过Application类中的main方法启动SpringBoot应用,并通过调用scheduler.start()方法来启动任务调度器。

示例

接下来我们提供两个示例,帮助读者更好的理解上述步骤。

示例1

下面的示例将每隔5秒钟输出一条日志。

任务实现类:

@Component
public class SimpleJob extends QuartzJobBean{

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Simple Job执行");
    }
}

任务调度和任务启动类:

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail simpleJobDetail() {
        return JobBuilder.newJob(SimpleJob.class)
                .withIdentity("simpleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger simpleJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5)
                .repeatForever();

        return TriggerBuilder.newTrigger()
                .forJob(simpleJobDetail())
                .withIdentity("simpleJobTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }

    @Bean
    public SchedulerFactoryBean getSchedulerFactoryBean() {
        SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
        scheduler.setTriggers(simpleJobTrigger());
        return scheduler;
    }
}

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

        Scheduler scheduler = (Scheduler) context.getBean("schedulerFactoryBean");

        scheduler.start();
    }
}

示例2

下面的示例将在每周一和每周五的凌晨3点执行一次。

任务实现类:

@Component
public class WeeklyJob extends QuartzJobBean{

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Weekly Job执行");
    }
}

任务调度和任务启动类:

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail weeklyJobDetail() {
        return JobBuilder.newJob(WeeklyJob.class)
                .withIdentity("weeklyJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger weeklyJobTrigger() {
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 3 ? * MON,FRI");

        return TriggerBuilder.newTrigger()
                .forJob(weeklyJobDetail())
                .withIdentity("weeklyJobTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }

    @Bean
    public SchedulerFactoryBean getSchedulerFactoryBean() {
        SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
        scheduler.setTriggers(weeklyJobTrigger());
        return scheduler;
    }
}

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

        Scheduler scheduler = (Scheduler) context.getBean("schedulerFactoryBean");

        scheduler.start();
    }
}

总结

至此,我们就完成了SpringBoot定时任务的案例讲解。SpringBoot提供了很好的定时任务支持,可以使得项目实现更多的自动化操作,大大提高开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之SpringBoot定时任务案例讲解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Tomcat与JDK版本对应关系以及Tomcat各版本特性

    关于Tomcat与JDK版本对应关系 Tomcat的版本与JDK版本有所关联,不同版本的Tomcat需要依赖不同版本的JDK才能正常运行,具体对应关系如下: Tomcat版本 JDK版本 Tomcat 10.x JDK 11 Tomcat 9.x JDK 8-16 Tomcat 8.x JDK 7-8 Tomcat 7.x JDK 6-7 Tomcat 6.…

    Java 2023年5月20日
    00
  • 使用MybatisPlus自定义模版中能获取到的信息

    MybatisPlus(简称MP)是一个基于Mybatis的增强工具库,可以大大简化Mybatis开发,提高开发效率。MP支持使用自定义模版来生成代码,通过自定义模版可以快速生成符合公司业务规范的代码,而且MP在模版中提供了很多变量,方便我们在模版中使用。 下面详细讲解在MP自定义模板中能够获取到的信息及使用方法: 1. 可以获取表的元数据信息 在自定义模版…

    Java 2023年6月15日
    00
  • Spring Boot + thymeleaf 实现文件上传下载功能

    下面我将详细讲解“Spring Boot + Thymeleaf 实现文件上传下载功能”的完整攻略。 准备工作 在开始前,请确保你已经具备以下环境: JDK1.8及以上 Maven 3.0及以上 项目搭建 建立一个 Spring Boot 项目 可以通过 Spring Initializr 快速搭建,选择 Web 依赖和 Thymeleaf 模板引擎即可。 …

    Java 2023年6月15日
    00
  • 详解Spring Data操作Redis数据库

    详解Spring Data操作Redis数据库 Redis是一种快速、开源的NoSQL数据库,它以键/值(key/value)存储数据,支持多种数据结构,包括字符串、哈希、列表、集合等。在应用程序开发中,连接Redis并进行数据操作是一个常见场景。Spring Data提供了对多种数据存储技术(包括Redis)的抽象和简化,同时还提供了常见的数据操作功能。下…

    Java 2023年5月20日
    00
  • 使用Spring Security OAuth2实现单点登录

    使用Spring Security OAuth2实现单点登录的完整攻略如下: 1. 概述 OAuth(Open Authorization)是一个标准的身份验证和授权协议,OAuth2是OAuth协议的下一个版本。OAuth2基于授权访问所有类型的应用程序,通过集中授权服务器授权用户访问受保护的资源。在实际应用中,OAuth2通常用来实现单点登录(SSO)的…

    Java 2023年5月20日
    00
  • 如何使用Java性能分析工具?

    使用Java性能分析工具是优化Java应用程序性能的重要手段之一。下面是一份Java性能分析工具的使用攻略。 1.选择适合自己的性能分析工具 Java生态系统中有许多性能分析工具,根据具体场景和需求选择合适的工具非常重要。下面是一些常见的Java性能分析工具: JProfiler YourKit Java Profiler VisualVM Java Fli…

    Java 2023年5月11日
    00
  • Spring populateBean属性赋值和自动注入

    Spring框架是一款高效的Java开发框架,其优秀的依赖注入机制使得程序员们可以更加快速和高效的进行开发。其中,populateBean属性赋值和自动注入是Spring框架中最为常见的两种方式,下面将对这两种方式进行详细的讲解。 1. populateBean属性赋值 populateBean属性赋值是Spring框架中最为常用的一种方式,其作用是将数据传…

    Java 2023年6月15日
    00
  • Mybatis与Jpa的区别和性能对比总结

    Mybatis与JPA的区别 定义 MyBatis是一个开源的ORM框架,它支持定制化SQL、存储过程以及高级映射。同时提供了缓存机制,可以优化数据库访问性能。 而JPA(Java Persistence API)是一个规范,不是具体的实现。它基于ORM(Object-Relational Mapping,对象关系映射)思想,将数据库中的表映射成Java对象…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部