spring版本:3.1.0 或以上
1.新建定时任务配置文件
如:applicationContext-jobs.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd" default-lazy-init="true"> <!-- 定时器配置 task:executor/@pool-size:可以指定执行线程池的初始大小、最大大小 task:executor/@queue-capacity:等待执行的任务队列的容量 task:executor/@rejection-policy:当等待队已满时的策略,分为丢弃、由任务执行器直接运行等方式 --> <task:scheduler id="scheduler" pool-size="10" /> <task:executor id="executor" keep-alive="3600" pool-size="100-200" queue-capacity="500" rejection-policy="CALLER_RUNS" /> <task:annotation-driven executor="executor" scheduler="scheduler" /> </beans>
2. web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/applicationContext.xml,
classpath:spring/applicationContext-jobs.xml
</param-value>
</context-param>
注:不要将 applicationContext-jobs.xml 在 applicationContext.xml 中引入,不然定时任务会同时执行两次
3. 定时任务类
@Component 这个注解一定要加上,不然定时器不会执行
import org.apache.log4j.Logger; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; /** * * * @date 2019年3月9日 * @since JDK 1.8 */ @Component public class Job { private static final Logger logger = Logger.getLogger(Job.class); // 0/15 * * * * ? 15秒钟执行一次 // 0 0/1 * * * ? 一分钟执行一次 @Scheduled(cron = "0/15 * * * * ?") public void doSomething() { logger.info("doSomething"); } }
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wjh</groupId> <artifactId>spring3-job</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>spring3-job Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 编译时的编码 --> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!-- JDK版本 --> <project.compile.version>1.8</project.compile.version> <spring.version>3.1.0.RELEASE</spring.version> </properties> <dependencies> <!-- Start Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-mock</artifactId> <version>2.0.8</version> <scope>test</scope> </dependency> <!-- End Spring --> <dependency> <groupId>quartz</groupId> <artifactId>quartz</artifactId> <version>1.5.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.56</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.8</version> </dependency> <!-- <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency> --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.26</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.26</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>spring3-job</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>${project.compile.version}</source> <target>${project.compile.version}</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 打包时跳过单元测试 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.0</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> <!-- 打包后包含所有的依赖的jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>assemble-all</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <!-- 在Java8下忽略Javadoc的编译错误 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.10.3</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </execution> </executions> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.tld</include> </includes> <filtering>false</filtering> <!--这里是false,用true会报 数据库连接 错误 --> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.tld</include> </includes> <filtering>false</filtering> </resource> </resources> </build> </project>
相关推荐
5. **错误的Cron表达式**:检查`cronExpression`,确保它不会在同一时间点触发两次任务。 解决这类问题,通常需要详细审查配置文件,查看日志,甚至通过调试来定位问题所在。确保Job的唯一性,正确配置Scheduler,...
标题中的“spring定时器启动两次原因及解决”指的是在Spring框架中使用了定时任务功能,如Spring Boot的`@Scheduled`注解或者Spring Task模块,但遇到了定时任务被触发执行了两次的问题。这种情况可能是由于配置不当...
本篇将详细介绍如何在Spring MVC中配置和使用定时任务,并结合数据库中设置的时间进行执行。 首先,我们需要引入Spring的定时任务模块,即`spring-context-support`。在Maven项目的`pom.xml`文件中添加以下依赖: ...
本篇文章将详细讲解两种在Spring MVC框架中实现定时任务的方法:Spring MVC自带的定时器以及Quartz与Spring的集成。 首先,我们来看看Spring MVC自带的定时任务。Spring MVC作为Spring框架的一个模块,主要处理HTTP...
在Spring 3.0 MVC框架中,定时器和多线程任务是两个关键概念,用于构建高效、自动化的Web应用程序。下面将详细讲解这两个概念及其在实际应用中的使用。 一、Spring 3.0 MVC定时器 在Spring 3.0中,我们可以使用...
在Spring框架中,定时任务和线程池是两个非常重要的组件,它们可以帮助我们实现高效的后台任务处理。这篇博文“Spring基于线程池的定时任务线程异常实践”深入探讨了如何在Spring中结合线程池来执行定时任务,并且...
Spring框架提供了强大的定时任务支持,可以方便地与Spring MVC进行集成,实现灵活的定时任务调度。本文将详细介绍如何使用Spring整合Quartz库来创建和管理定时任务。 首先,Spring对定时任务的支持主要通过`org....
然而,在Spring定时任务(如使用`@Scheduled`注解的方法)中,如果遇到`@PostConstruct`被多次执行的情况,这通常意味着存在配置问题或对Spring生命周期的理解不准确。下面我们将深入分析这个问题,并提供相应的解决...
如果你需要深入学习,可以解压并研究其中的代码结构和配置文件,以加深对Spring MVC定时任务的理解。同时,通过查阅Spring官方文档和相关教程,你可以掌握更多关于定时任务和Spring MVC的知识。
**Spring MVC 框架与定时任务配置** Spring MVC 是 Spring 框架的一个模块,专为构建基于模型-视图-控制器(MVC)架构的 Web 应用程序而设计。它提供了一种优雅的方式来处理 HTTP 请求和响应,使得开发者能够更专注...
Spring 和 Quartz 是两个在 Java 开发中非常重要的框架,它们分别用于处理依赖注入和任务调度。Spring 是一个全面的后端开发框架,提供了一系列服务,包括但不限于:对象管理、AOP(面向切面编程)、MVC(模型-视图-...
Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等众多功能;而 Quartz 是一个强大的作业调度库,可以用于...
前者会在指定的延迟后执行一次任务,而后者则会按照固定的延迟(period)周期性地执行任务。 在给定的代码实例中,`TimerListen` 类实现了 `ServletContextListener` 接口,这意味着它会在Web应用启动和关闭时被...
Spring 是一个强大的企业级应用框架,提供诸如 AOP(面向切面编程)、DI(依赖注入)、MVC(模型-视图-控制器)等特性,而 Quartz 是一个开源的作业调度库,用于执行定时任务。接下来,我们将深入探讨这两个技术的...
而Quartz则是一个强大的、开放源码的作业调度库,它能够按预定时间执行任务,比如发送邮件、执行数据清理等定时任务。 首先,我们要理解Spring框架。Spring的核心特性包括IoC(Inversion of Control,控制反转)和...
在本示例 "spring-quartz" 中,这两个框架被集成在一起,用于实现基于Cron表达式的定时任务。Cron表达式是一种时间调度语言,用于定义任务的执行频率,如每天的特定时间或每周的特定日期。下面将详细解释如何在...
Spring是一个全面的企业级应用框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,帮助开发者构建高效、灵活的Java应用程序。而Quartz则是一个开源的作业调度框架,用于在Java应用中安排...
5. **任务调度**:Spring Task模块支持定时任务和异步任务,可以与Quartz或SimpleScheduler集成。 6. **测试模块**:提供了方便的测试工具和支持,包括模拟对象、测试上下文框架等。 三、关键源码解析 1. **Bean的...
在Spring框架中,定时任务是应用开发中常见的一种需求,用于定期执行某些任务,比如数据同步、清理过期数据等。Spring提供了多种定时任务的实现方式,包括Spring自身的`TaskScheduler`和集成第三方库如Quartz。这里...
SpringMVC 是一个用于构建 Web 应用程序的轻量级、模型-视图-控制器(MVC)框架,而 Quartz 是一个开源的任务调度库,能够帮助开发者在应用程序中实现定时任务的管理。接下来,我们将深入探讨这两个框架如何协同工作...