Spring Boot中实现定时任务应用实践

以下是关于“Spring Boot中实现定时任务应用实践”的完整攻略。

1. 添加依赖

首先,在pom.xml文件中添加spring-boot-starter-quartz依赖:

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

2. 配置Quartz

application.properties文件中添加Quartz的配置信息:

# 配置Quartz
spring.quartz.properties.org.quartz.scheduler.instanceName=SpringBootQuartzTask
spring.quartz.properties.org.quartz.scheduler.instanceId=1
spring.quartz.properties.org.quartz.scheduler.skipUpdateCheck=true
spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.dataSource=quartzDataSource
spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
spring.quartz.properties.org.quartz.jobStore.isClustered=true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=20000
spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
spring.quartz.properties.org.quartz.threadPool.threadCount=10
spring.quartz.properties.org.quartz.threadPool.threadPriority=5
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.driverClassName=org.postgresql.Driver
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.URL=jdbc:postgresql://localhost:5432/quartz
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.user=postgres
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.password=passwd
spring.quartz.properties.org.quartz.dataSource.quartzDataSource.maxConnections=10

其中,org.quartz.dataSource.quartzDataSource.URL是Quartz的数据源配置,你可以根据自己的数据库类型进行配置。

3. 定义定时任务

Job类中定义定时任务:

@Component
public class ScheduleTask implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Hello, Quartz!");
    }
}

其中,@Component注解表示这是一个Spring的组件,用于实现Bean的依赖注入。

4. 配置定时任务

在定时任务配置类中,配置排程任务:

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(ScheduleTask.class) //指定需要执行的任务类
                .storeDurably().build();
    }

    @Bean
    public Trigger trigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10) //每10s执行一次
                .repeatForever();
        return TriggerBuilder.newTrigger().forJob(jobDetail())
                .withSchedule(scheduleBuilder).build();
    }

}

jobDetail()方法返回的是JobDetail对象,其中需要指定需要执行的任务类(即ScheduleTask),同时将其设置为持久化存储。trigger()方法返回的是Trigger对象,其中需要指定任务执行的时间间隔。

5. 测试

新建一个Spring Boot项目,并在Application类中添加@EnableScheduling注解启用定时任务功能:

@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

最后,运行项目,你会发现Quartz定时任务已经被自动执行,每10秒钟打印一次“Hello, Quartz!”。

示例1

TaskService中添加一个定时任务:

@Service
public class TaskService {

    @Scheduled(cron = "0 0/1 * * * ?")
    public void job() {
        System.out.println("开始执行定时任务: " + LocalDateTime.now());
    }

}

cron表达式中,0 0/1 * * * ?表示每分钟执行一次。

示例2

添加通过@Scheduled注解动态改变定时任务执行时间:

@Service
public class TaskService {

    private static final Logger logger = LoggerFactory.getLogger(TaskService.class);

    private ScheduledExecutorService service = Executors.newScheduledThreadPool(1);

    // 定时任务句柄,用于修改定时任务执行时间
    private ScheduledFuture<?> future;

    /**
     * 启动定时任务
     *
     * @param rate 时间间隔(单位:秒)
     */
    public void start(int rate) {
        if (future != null) {
            future.cancel(false);
        }
        future = service.scheduleAtFixedRate(() ->
                        logger.info("Hello, Scheduled Task!"),
                0, rate, TimeUnit.SECONDS);
    }

}

start方法中,通过service.scheduleAtFixedRate()方法实现动态改变定时任务执行时间。

以上就是关于“Spring Boot中实现定时任务应用实践”的完整攻略和多个示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot中实现定时任务应用实践 - Python技术站

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

相关文章

  • Oracle如何使用PL/SQL调试存储过程

    当我们在开发Oracle数据库中的存储过程时,调试是必不可少的环节。PL/SQL是Oracle数据库中的过程语言,它支持自带调试器,可以为我们调试存储过程提供极大的帮助。 下面,我将为你详细讲解“Oracle如何使用PL/SQL调试存储过程”的完整攻略。 准备工作 在使用PL/SQL调试存储过程前,我们需要进行一些准备工作。具体操作步骤如下: 配置Oracl…

    database 2023年5月21日
    00
  • MySQL三大日志(binlog、redo log和undo log)图文详解

    MySQL三大日志(binlog、redo log和undo log)图文详解 MySQL作为一种关系型数据库管理系统,其日志系统非常重要。日志系统中,主要有三种日志:binlog、redo log和undo log。本文将详细讲解这三种日志的功能。 1. binlog(二进制日志) binlog是MySQL中记录所有对数据的更改操作的日志文件。MySQL将…

    database 2023年5月22日
    00
  • window下homestead开发环境安装详细教程

    Window下Homestead开发环境安装详细教程 简介 Homestead是一个基于Vagrant和VirtualBox的本地开发环境,由Laravel提供支持。它能够在不同的操作系统上快速和方便地创建出与线上服务器环境相同的开发环境,方便我们进行开发和测试工作。 环境需求 在开始安装之前,请确保你的电脑上已经安装了以下软件:- Git- Virtual…

    database 2023年5月21日
    00
  • 详解Oracle自定义异常示例

    我来为您详细讲解“详解Oracle自定义异常示例”的完整攻略。 什么是Oracle自定义异常 在Oracle数据库开发中,我们可以自定义异常。自定义异常是指用户自己定义的异常,通过raise语句抛出。与系统定义的异常不同,自定义异常可以根据具体情况定义异常信息和处理方式,让我们的程序变得更加灵活和易于维护。 Oracle自定义异常语法 Oracle自定义异常…

    database 2023年5月21日
    00
  • mysql中提高Order by语句查询效率的两个思路分析

    下面是详细讲解“mysql中提高Order by语句查询效率的两个思路分析”的完整攻略。 一、优化思路一:使用索引 在MySQL中,使用索引可以提高查询效率。对于Order by语句,它的查询过程会根据指定的字段进行排序,因此可以在该字段上建立索引,从而提高查询效率。 示例1:建立索引 假设现在有一个表格,名为students,其中有三个字段:id(主键)、…

    database 2023年5月19日
    00
  • SQL Server 2005中更改sa的用户名的方法

    要在SQL Server 2005中更改”sa”用户的用户名,可以使用以下步骤: 步骤一:确保有其他管理员账户 首先,您需要确保在SQL Server 2005中至少存在一个其他管理员账户,以便在更改”sa”用户的用户名时不会丢失对其进行管理的能力。如果没有其他管理员账户,请创建一个。 步骤二:创建一个临时管理员账户 接下来,我们需要创建一个临时管理员账户,…

    database 2023年5月21日
    00
  • Node.js中使用mongoskin操作mongoDB实例

    Node.js作为一种服务器端JavaScript,可以通过MongoDB数据库进行数据的读取、存储和管理。mongoskin是一个在Node.js中运行的MongoDB驱动程序,它具有可读性强的API和更好的性能。本文将详细介绍如何在Node.js中使用mongoskin操作mongoDB实例的完整攻略。 安装mongoskin 在使用mongoskin之…

    database 2023年5月22日
    00
  • Mysql一些复杂的sql语句(查询与删除重复的行)

    查询与删除重复的行是一个经常出现的问题,在MySQL中可以通过多种方法来解决。下面我们将介绍一些复杂sql语句来处理这个问题。 1. 查询重复的行 要查询重复的行需要使用GROUP BY和HAVING语句进行筛选,以下是查询重复行的语法: SELECT column1, column2, …, columnN, COUNT(*) FROM table_n…

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