`
xurichusheng
  • 浏览: 343931 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring mvc 定时任务,避免同时执行两次

阅读更多

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>

 

0
0
分享到:
评论

相关推荐

    springMvc定时器执行两次

    5. **错误的Cron表达式**:检查`cronExpression`,确保它不会在同一时间点触发两次任务。 解决这类问题,通常需要详细审查配置文件,查看日志,甚至通过调试来定位问题所在。确保Job的唯一性,正确配置Scheduler,...

    spring mvc 定时

    本篇将详细介绍如何在Spring MVC中配置和使用定时任务,并结合数据库中设置的时间进行执行。 首先,我们需要引入Spring的定时任务模块,即`spring-context-support`。在Maven项目的`pom.xml`文件中添加以下依赖: ...

    spring定时器启动两次原因及解决

    标题中的“spring定时器启动两次原因及解决”指的是在Spring框架中使用了定时任务功能,如Spring Boot的`@Scheduled`注解或者Spring Task模块,但遇到了定时任务被触发执行了两次的问题。这种情况可能是由于配置不当...

    定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)

    本篇文章将详细讲解两种在Spring MVC框架中实现定时任务的方法:Spring MVC自带的定时器以及Quartz与Spring的集成。 首先,我们来看看Spring MVC自带的定时任务。Spring MVC作为Spring框架的一个模块,主要处理HTTP...

    Spring3.0 mvc 定时器及多线程任务demo

    在Spring 3.0 MVC框架中,定时器和多线程任务是两个关键概念,用于构建高效、自动化的Web应用程序。下面将详细讲解这两个概念及其在实际应用中的使用。 一、Spring 3.0 MVC定时器 在Spring 3.0中,我们可以使用...

    Spring基于线程池的定时任务线挰异常实践

    在Spring框架中,定时任务和线程池是两个非常重要的组件,它们可以帮助我们实现高效的后台任务处理。这篇博文“Spring基于线程池的定时任务线程异常实践”深入探讨了如何在Spring中结合线程池来执行定时任务,并且...

    spring-timer-quartz.zip_namegnd_spring定时任务

    Spring框架提供了强大的定时任务支持,可以方便地与Spring MVC进行集成,实现灵活的定时任务调度。本文将详细介绍如何使用Spring整合Quartz库来创建和管理定时任务。 首先,Spring对定时任务的支持主要通过`org....

    Spring定时任务中@PostConstruct被多次执行异常的分析与解决

    然而,在Spring定时任务(如使用`@Scheduled`注解的方法)中,如果遇到`@PostConstruct`被多次执行的情况,这通常意味着存在配置问题或对Spring生命周期的理解不准确。下面我们将深入分析这个问题,并提供相应的解决...

    springmvc实现的定时器

    如果你需要深入学习,可以解压并研究其中的代码结构和配置文件,以加深对Spring MVC定时任务的理解。同时,通过查阅Spring官方文档和相关教程,你可以掌握更多关于定时任务和Spring MVC的知识。

    spib-mvc框架,内含定时器配置用法

    **Spring MVC 框架与定时任务配置** Spring MVC 是 Spring 框架的一个模块,专为构建基于模型-视图-控制器(MVC)架构的 Web 应用程序而设计。它提供了一种优雅的方式来处理 HTTP 请求和响应,使得开发者能够更专注...

    spring quartz相关jar包(多版本)

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架,它们分别用于处理依赖注入和任务调度。Spring 是一个全面的后端开发框架,提供了一系列服务,包括但不限于:对象管理、AOP(面向切面编程)、MVC(模型-视图-...

    spring-quartz-02

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等众多功能;而 Quartz 是一个强大的作业调度库,可以用于...

    java Timer定时器实例 Spring实例.doc

    前者会在指定的延迟后执行一次任务,而后者则会按照固定的延迟(period)周期性地执行任务。 在给定的代码实例中,`TimerListen` 类实现了 `ServletContextListener` 接口,这意味着它会在Web应用启动和关闭时被...

    spring+quartz

    Spring 是一个强大的企业级应用框架,提供诸如 AOP(面向切面编程)、DI(依赖注入)、MVC(模型-视图-控制器)等特性,而 Quartz 是一个开源的作业调度库,用于执行定时任务。接下来,我们将深入探讨这两个技术的...

    spring+squartz实例

    而Quartz则是一个强大的、开放源码的作业调度库,它能够按预定时间执行任务,比如发送邮件、执行数据清理等定时任务。 首先,我们要理解Spring框架。Spring的核心特性包括IoC(Inversion of Control,控制反转)和...

    spring-quartz

    在本示例 "spring-quartz" 中,这两个框架被集成在一起,用于实现基于Cron表达式的定时任务。Cron表达式是一种时间调度语言,用于定义任务的执行频率,如每天的特定时间或每周的特定日期。下面将详细解释如何在...

    spring+quartz需要的4个jar包 不需要6个

    Spring是一个全面的企业级应用框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,帮助开发者构建高效、灵活的Java应用程序。而Quartz则是一个开源的作业调度框架,用于在Java应用中安排...

    spring源码解析

    5. **任务调度**:Spring Task模块支持定时任务和异步任务,可以与Quartz或SimpleScheduler集成。 6. **测试模块**:提供了方便的测试工具和支持,包括模拟对象、测试上下文框架等。 三、关键源码解析 1. **Bean的...

    pring定时器的使用

    在Spring框架中,定时任务是应用开发中常见的一种需求,用于定期执行某些任务,比如数据同步、清理过期数据等。Spring提供了多种定时任务的实现方式,包括Spring自身的`TaskScheduler`和集成第三方库如Quartz。这里...

    springMVC+quartz任务调度

    SpringMVC 是一个用于构建 Web 应用程序的轻量级、模型-视图-控制器(MVC)框架,而 Quartz 是一个开源的任务调度库,能够帮助开发者在应用程序中实现定时任务的管理。接下来,我们将深入探讨这两个框架如何协同工作...

Global site tag (gtag.js) - Google Analytics