Java Web实现添加定时任务的方法示例

以下是“Java Web实现添加定时任务的方法示例”的完整攻略,分为两条示例:

示例一:使用Quartz框架实现Java Web定时任务

1. 引入相关依赖

在 pom.xml 文件中引入 Quartz 相关依赖:

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>

2. 编写定时任务类

在项目中创建类,继承 Job 接口并实现 execute 方法,在该方法内编写具体的定时任务逻辑。

示例代码如下:

public class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 定时任务逻辑
        // ...
    }

}

3. 配置定时任务

在项目中创建 Quartz 配置文件,指定具体的定时任务信息。

示例代码如下:

<bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="myJob"/>
    <property name="targetMethod" value="execute"/>
</bean>

<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="myJobDetail"/>
    <property name="cronExpression" value="0 0/5 * * * ?"/>
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="myTrigger"/>
        </list>
    </property>
</bean>

4. 启动定时任务

在项目启动时,创建并启动 scheduler,即可启动定时任务。

public class QuartzConfig {

    private static final String CRON_EXPRESSION = "0 0/5 * * * ?";

    @Bean
    public JobDetail myJobDetail() {
        return JobBuilder.newJob(MyJob.class)
            .withIdentity("myJob")
            .storeDurably()
            .build();
    }

    @Bean
    public Trigger myTrigger() {
        return TriggerBuilder.newTrigger()
            .forJob(myJobDetail())
            .withIdentity("myTrigger")
            .withSchedule(CronScheduleBuilder.cronSchedule(CRON_EXPRESSION))
            .build();
    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobDetails(myJobDetail());
        schedulerFactoryBean.setTriggers(myTrigger());
        return schedulerFactoryBean;
    }

}

示例二:使用Spring集成Quartz实现Java Web定时任务

1. 引入相关依赖

在 pom.xml 文件中引入 Spring 相关依赖和 Quartz 相关依赖:

<!-- Spring依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>RELEASE</version>
</dependency>

<!-- Quartz依赖 -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>

2. 编写定时任务类

同示例一中的编写方式。

3. 配置定时任务

在 Spring 配置文件中配置定时任务的 cron 触发器。

示例代码如下:

<bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="myJob"/>
    <property name="targetMethod" value="execute"/>
</bean>

<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="myJobDetail"/>
    <property name="cronExpression" value="0 0/5 * * * ?"/>
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="myTrigger"/>
        </list>
    </property>
</bean>

4. 启动定时任务

在项目启动时,通过 Spring 的 SchedulerFactoryBean 获取 scheduler,即可启动定时任务。

public class QuartzConfig {

    private static final String CRON_EXPRESSION = "0 0/5 * * * ?";

    @Bean
    public JobDetail myJobDetail() {
        return JobBuilder.newJob(MyJob.class)
            .withIdentity("myJob")
            .storeDurably()
            .build();
    }

    @Bean
    public Trigger myTrigger() {
        return TriggerBuilder.newTrigger()
            .forJob(myJobDetail())
            .withIdentity("myTrigger")
            .withSchedule(CronScheduleBuilder.cronSchedule(CRON_EXPRESSION))
            .build();
    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobDetails(myJobDetail());
        schedulerFactoryBean.setTriggers(myTrigger());
        return schedulerFactoryBean;
    }

}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Web实现添加定时任务的方法示例 - Python技术站

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

相关文章

  • Java 精炼解读类和对象原理

    Java 精炼解读类和对象原理 什么是类和对象 在面向对象编程(Object-Oriented Programming,简称OOP)的思想中,类和对象是两个重要的概念。类是一种数据类型,它定义了一组属性和方法,而对象则是类的一个实例,具有这个类所定义的属性和方法。 类的定义和使用 在Java中,通过class关键字来定义一个类,格式如下所示: public …

    Java 2023年5月26日
    00
  • java以json格式向后台服务器接口发送请求的实例

    下面我来详细讲解「Java以JSON格式向后台服务器接口发送请求的实例」: 1.什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在前后端通信的接口中,JSON格式被广泛应用。它具有易读性好、可解析性强等特点,通常使用键值对表示数据。键值对之间使用冒号(:)分割,不同的键值对之间使用逗号(,)分割,键…

    Java 2023年5月26日
    00
  • 浅谈Servlet转发到JSP页面的路径问题(必看)

    浅谈Servlet转发到JSP页面的路径问题 背景 在Java web应用中,Servlet经常被用来处理请求并生成动态内容。而JSP作为模板引擎,也是在web应用中常见的一种技术。在实际开发中,我们常常需要在Servlet中转发请求到JSP页面,并在页面中显示动态内容。但在这个过程中,经常会遇到一些路径问题,本篇文章将从路径问题的角度来探讨Servlet转…

    Java 2023年6月15日
    00
  • Nginx 连接tomcat时会话粘性问题分析及解决方法

    Nginx 连接tomcat时会话粘性问题分析及解决方法 问题背景 在使用 Nginx 对 Tomcat 进行反向代理时,如果不做任何特殊处理,有可能出现会话粘性问题,即同一个用户的请求被转发到了不同的 Tomcat 实例上,导致会话信息丢失,从而导致用户操作失败。 问题分析 会话粘性问题的根本原因是访问服务器时没有考虑到会话信息,导致同一用户的请求在多个服…

    Java 2023年6月16日
    00
  • springsecurity轻松实现角色权限的示例代码

    下面详细讲解“springsecurity轻松实现角色权限的示例代码”的完整攻略。 什么是Spring Security Spring Security是一个基于Spring框架的安全框架,它提供了一种安全性配置,可以处理认证(用户身份验证)和授权(用户访问控制)。通过它,我们可以轻松实现角色权限的管理。 Spring Security的基本概念 在使用Sp…

    Java 2023年5月20日
    00
  • java模仿windows计算器示例

    下面我将为您详细讲解如何使用Java语言模仿Windows计算器,并提供两个示例说明。步骤如下: 第一步:创建基本的计算器界面 在Java中,可以使用Swing框架来实现窗口界面设计。首先需要使用JFrame类创建一个窗口,然后在窗口中添加各种控件(按钮、文本框、标签等)。 在创建窗口之前,需要导入Swing框架中的各种类和方法。代码示例: import j…

    Java 2023年6月15日
    00
  • 详解netty中常用的xml编码解码器

    为了讲解“详解netty中常用的xml编码解码器”的完整攻略,我们需要以下内容: XML 的基础知识和常见的 XML 接口介绍 Netty 中 XML 编码解码器的实现方式 在 Netty 中实现 XML 编码解码器的示例 下面我们就来一步一步地讲解。 1. XML 的基础知识和常见的 XML 接口介绍 XML 是一种常见的标记语言,用于描述各种各样的数据和…

    Java 2023年6月1日
    00
  • Spring学习JdbcTemplate数据库事务参数

    下面就是关于“Spring学习JdbcTemplate数据库事务参数”的完整攻略: 1. JdbcTemplate概述 JdbcTemplate是Spring框架中一个非常重要的核心组件,它为开发者提供了非常方便的方式进行数据访问操作。它提供了完善的JDBC功能支持,并简化了JDBC代码的编写。JdbcTemplate底层实现了对JDBC进行封装和简化,更加…

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