springmvc中实现quartz定时任务(每分钟的第3秒执行任务调度方法)

简介: 1:实现触发器,最大的问题是jar包的处理(*.jar定时jar和sourcecodesource code): 此处,最关键的jar为第二个,名字最长。 maven依赖: <dependency> <groupId>org.apache.servicemix.bundles</groupId> <artifactId&g

1:实现触发器,最大的问题是jar包的处理(*.jar定时jar和sourcecodesource code):

此处,最关键的jar为第二个,名字最长。

maven依赖:

		<dependency>
			<groupId>org.apache.servicemix.bundles</groupId>
			<artifactId>org.apache.servicemix.bundles.spring-context-support</artifactId>
			<version>4.0.7.RELEASE_2</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>1.8.6</version>
		</dependency>

2:触发器在web.xml中配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>webdemo1</display-name>
	  <!-- 监听spring上下文容器 -->
  <listener>
  	<listener-class>
  			org.springframework.web.context.ContextLoaderListener 
  	</listener-class>	
  </listener>
  <!-- 加载spring的xml配置文件到spring的上下文容器中 -->
  <context-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath*:applicationContext-*.xml</param-value>
  </context-param>
    <!-- 配置springmvc DispatcherServlet  -->
  <servlet>
  	<servlet-name>mvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>/WEB-INF/springmvc.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 配置DispatcherServlet需要拦截的url -->
  <servlet-mapping>
  	<servlet-name>mvc</servlet-name>
  	<url-pattern>*.html</url-pattern>
  </servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

3:springmvc的配置:

<?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:context="http://www.springframework.org/schema/context"  
	xmlns:mvc="http://www.springframework.org/schema/mvc"  
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
	http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
		<!-- springmvc配置 -->
		<!-- 通过component-scan让spring扫描package下的所有类,让spring的注解生效-->
		<context:component-scan base-package="com.tsxs"></context:component-scan>
		<!-- 配置springmvc的视图渲染器,让其前缀为:/ 后缀为: .jsp 将视图渲染到 /views/<method返回值>.jsp中 -->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<property name="prefix" value="/WEB-INF/views/"></property>
			<property name="suffix" value=".jsp"></property>
		</bean>
</beans>

4:定时任务配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"
	default-autowire="byName" default-lazy-init="false">
	<!-- default-autowire="byName" default-lazy-init="false"此两个值可以不配置 -->
	<description>Quartz Job Setting</description>
  <!-- A.配置调度的任务对应bean的id和自定义class-->
  <bean id="myQuartz" class="com.tsxs.tools.Quartz" />
  <!-- B.配置调度任务对应的bean的id和执行的方法,作业不并发调度-->
  <bean id="myDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="myQuartz" />
    <property name="targetMethod" value="tips" />
    <property name="concurrent" value="false" />
  </bean>
  <!-- C.配置调度任务执行的触发的时间-->
  <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail" ref="myDetail" />
     <property name="cronExpression">
     <!-- 每分钟的第3秒执行任务调度 -->
      <value>3 * * * * ?</value>
    </property>
  </bean>
  <!-- D.Quartz的调度工厂,调度工厂只能有一个,多个调度任务在list中添加 -->
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
      <list>
         <!-- 所有的调度列表-->
        <ref bean="myTrigger" />
<!-- <ref bean="myTrigger1" />
        <ref bean="myTrigger2" />
        对应的bean配置:id="myDetail1" 和 id="myTrigger2" 可以对应的并行多配置-对应执行JavaBean和执行时间(各自触发time)
  -->
      </list>
    </property>
  </bean>
</beans>

注:时间配置:可以看quartz配置或者网络搜索“quartz定时配置”

5:定时任务执行JavaBean:

package com.tsxs.tools;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class Quartz {
//	public class Quartz implements Job{
//此处可以不实现Job接口的execute方法
//	private Date date;
	/**
	 * 定时任务,执行方法
	 * */
	public void tips(){
		String time = new SimpleDateFormat("MMM d,yyyy KK:mm:ss a",Locale.ENGLISH).format(System.currentTimeMillis());
		System.out.println("time:"+time);
	}

//	@Override
//	public void execute(JobExecutionContext context) throws JobExecutionException {
//		date = context.getFireTime();
//	}
}


6:运行结果:

time:Jun 24,2015 00:05:03 PM
time:Jun 24,2015 00:06:03 PM
time:Jun 24,2015 00:07:03 PM
time:Jun 24,2015 00:08:03 PM
time:Jun 24,2015 00:09:03 PM

 

注:

①:定时任务执行JavaBean可以不实现Job接口的execute方法

②:在定时任务配置中:设置default-lazy-init="true",否则定时任务不触发,如果不明确指明default-lazy-init的值,默认是false

③:在定时任务配置中:设置default-autowire="byName"的属性,可能导致后台会报org.springframework.beans.factory.BeanCreationException错误(此时,就不能通过Bean名称自动注入,必须通过明确引用注入)

目录
相关文章
|
19天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
28 1
|
20天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
25 1
|
17天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
21 0
|
3月前
|
前端开发 Java Spring
SpringMVC种通过追踪源码查看是哪种类型的视图渲染器(一般流程方法)
这篇文章通过示例代码展示了如何在Spring MVC中编写和注册拦截器,以及如何在拦截器的不同阶段添加业务逻辑。
SpringMVC种通过追踪源码查看是哪种类型的视图渲染器(一般流程方法)
|
4月前
|
开发者 索引
SpringMVC原理(2)-目标方法是怎么被找到的
目标方法(Handler)是如何被找到的 涉及组件:HandlerMapping、MappingRegistry、HandlerExecutionChain
序-Servlet和SpringMVC的联系和区别-配置路径先想好使用的使用的方法,然后匹配的需要的技术
序-Servlet和SpringMVC的联系和区别-配置路径先想好使用的使用的方法,然后匹配的需要的技术
|
6月前
|
设计模式 前端开发 Java
[Spring ~源码] Spring的run方法以及SpringMVC执行流程
[Spring ~源码] Spring的run方法以及SpringMVC执行流程
|
6月前
|
Java Spring
SpringMVC控制层private方法中出现注入的service对象空指针异常
一、现象 SpringMVC中controller里的private接口中注入的service层的bean为null,而同一个controller中访问修饰符为public和protected的方法不会出现这样的问题。 controller中的方法被AOP进行了代理,普通Controller如果没有AOP,private方法中bean也是正常的。
|
JSON Java 数据格式
51SpringMVC - Controller方法返回值
51SpringMVC - Controller方法返回值
45 0
|
JSON 前端开发 Java
SpringMVC 方法三种类型返回值总结,你用过几种?
SpringMVC 方法三种类型返回值总结,你用过几种?