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

yizhihongxing

以下是关于“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日

相关文章

  • Python使用htpasswd实现基本认证授权的例子

    Python使用htpasswd实现基本认证授权的例子 简介 htpasswd是Apache HTTP服务器的一部分,用于创建和更新基于用户名和密码的认证。在Web应用程序中,可以使用htpasswd来实现用户的认证和授权。Python中可以使用htpasswd库来调用htpasswd相关的功能,以实现基本认证授权的功能。 步骤 安装htpasswd库 使用…

    database 2023年5月22日
    00
  • SQL小技巧 又快又简单的得到你的数据库每个表的记录数

    以下是详细的攻略: SQL小技巧:又快又简单的得到你的数据库每个表的记录数 在开发数据库应用程序时,我们常常需要获取数据库中各个表的记录数。虽然这看起来是个简单的任务,但实际上需要编写冗长且低效的代码。在这个基础上,我们将介绍两种SQL小技巧,可以轻松地获得数据库每个表的记录数。 方法一:使用系统表信息_schema.tables MySQL和Postgre…

    database 2023年5月22日
    00
  • SQL中查找某几个字段完全一样的数据

    要查询SQL中某几个字段完全一样的数据,可以采用以下步骤: 1.使用SELECT语句进行数据查询。2.在SELECT语句中使用DISTINCT关键词进行筛选,过滤掉重复的数据。3.使用GROUP BY语句进行分组,将具有相同值的数据归为一组。4.使用HAVING语句进行进一步筛选,找出具有相同值的数据组。 例如,在以下学生表格中,要查询姓名和年龄完全一样的所…

    database 2023年5月21日
    00
  • Oracle中使用Rownum分页详细例子

    下面是关于“Oracle中使用Rownum分页详细例子”的完整攻略: 概述 Rownum是Oracle中的一个伪列,它可以将每一行按照其插入顺序赋予一个唯一的行号。通过使用Rownum,我们可以在Oracle数据库中方便地实现分页查询功能。本攻略将介绍如何使用Rownum完成分页查询。 步骤 1. 建立测试表 首先,我们需要建立一个测试表来演示分页查询。如下…

    database 2023年5月21日
    00
  • 销售和市场营销的区别

    销售和市场营销的区别 概述 销售和市场营销是商业运营中的两个重要方面,这两个概念通常被人们混淆和误解。虽然它们有相似的目标,都是促进销售和增加利润,但它们的方法和策略有很大的不同。 销售 销售通常是指商业中一种短期的积极性活动,其目的是将产品或服务卖给目标客户。销售过程主要包括了以下几个步骤: 定位潜在客户 建立联系,促进客户与销售人员之间的交流 展示产品或…

    database 2023年3月27日
    00
  • SQL 从多个表中返回缺失值

    在SQL中从多个表中返回缺失值,我们可以使用外连接(Outer Join)来实现。外连接是基于两个表之间的关系,从左表或右表中选择所有行,然后再将符合条件的组合起来返回。 实现外连接的关键是使用LEFT JOIN或RIGHT JOIN语句。它们分别表示左外连接和右外连接,左外连接会返回包括左表中的所有行,即使右表中没有符合条件的数据,在相应的右表列上会显示N…

    database 2023年3月27日
    00
  • Oracle如何使用PL/SQL调试存储过程

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

    database 2023年5月21日
    00
  • MySQL异常处理浅析

    MySQL异常处理浅析 MySQL异常处理是开发过程中非常重要的一环,特别是在处理一些数据操作时,如果不进行异常处理,可能会导致程序出现错误甚至崩溃。在本篇攻略中,我们将分享MySQL异常处理的相关知识,包括异常的分类、异常处理方式以及常见的异常示例。 异常分类 MySQL异常可以分为两类:预期异常和非预期异常。 预期异常 预期异常是可以预见的,通常在代码早…

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