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日

相关文章

  • linux环境下配置mysql5.6支持IPV6连接的方法

    下面是在 Linux 环境下配置 MySQL 5.6 支持 IPV6 连接的攻略: 环境准备 确保 MySQL 5.6 已经安装在你的机器上。如果没有,可以使用以下命令进行安装: sudo apt-get install mysql-server-5.6 确保 IPV6 已经开启。可以使用以下命令查看是否已经开启: cat /proc/sys/net/ipv…

    database 2023年5月22日
    00
  • Redis redis-trib集群配置

      redis文档:http://doc.redisfans.com/ 参考:https://www.cnblogs.com/wuxl360/p/5920330.html           http://www.cnblogs.com/carryping/p/7447823.html          https://www.jianshu.com/p/2…

    Redis 2023年4月13日
    00
  • Redis缓存问题

    Redis是什么? Redis是一款开源的内存数据存储系统,它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。Redis将数据全部保留在内存中,因此读写速度快,是一款高性能的缓存系统。Redis还支持数据持久化,即将数据存储到磁盘中,以避免数据丢失。 Redis作为缓存系统的优势 高性能 Redis将数据全部加载到内存中,因此读写速度快,可以实现…

    Redis 2023年3月21日
    00
  • Linux下修改Oracle监听地址的方法

    Linux下修改Oracle监听地址的方法如下: 1. 查看当前监听地址和状态 在Linux服务器上,使用以下命令查看当前监听的状态: lsnrctl status 该命令将显示当前监听地址及其状态。例如: LSNRCTL for Linux: Version 11.2.0.1.0 – Production on 14-DEC-2021 12:45:36 C…

    database 2023年5月22日
    00
  • MySQL8.0的WITH查询详情

    当使用 MySQL 8.0 时,我们可以使用 Common Table Expressions (CTE) 或者简称为 WITH 查询来简化查询语句。本文将向您介绍MySQL 8.0的 WITH 查询详情及其用法的完整攻略。 什么是WITH查询 WITH查询在MySQL8.0中被称为公共表达式。使用WITH语句,我们可以为一次查询创建一个临时表,并在查询中使…

    database 2023年5月22日
    00
  • Ubuntu系统怎么查看磁盘使用情况?

    当我们使用Ubuntu系统并且需要查看磁盘的使用情况时,我们可以使用以下命令行工具: 1. 使用df命令 df命令可以查看文件系统的磁盘使用情况,我们可以使用以下命令查看: df -h 其中,“-h”参数可以使输出的结果更易读,以人类可读的方式显示磁盘使用量和可用空间,单位为GB或MB。 例如,我们可以使用以下命令查看/dev/sda1分区的使用情况: df…

    database 2023年5月22日
    00
  • Oracle数据库事务的开启与结束详解

    Oracle数据库事务的开启与结束详解 在Oracle数据库中,事务是指一组操作,这些操作要么全部完成,要么全部不完成,如果其中有任何一个操作失败,所有操作都将得到回滚,即之前的任何操作都将被取消并且回到事务开始前的状态。因此,事务的开启、关闭和回滚非常重要。 开始事务 开始事务的命令是BEGIN或START TRANSACTION。开始事务后,操作将被记录…

    database 2023年5月18日
    00
  • .net中webconfig 详解

    下面是”.net中webconfig 详解”的完整攻略。 一、什么是Web.config Web.config是一个XML格式的文件,它存储着一个Web应用程序中的配置信息,如数据库连接字符串、身份验证方式、Session状态管理等等。 Web.config配置信息可以修改,可以在运行时动态修改,这样就不用重新编译整个应用程序,使得应用程序的管理更加方便。 …

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