spring项目中使用quartz定时执行任务

项目需求:

1.有一个定时表task其中包括文章id和文章发布时间,状态三个字段,每隔1分钟读取一次该表将未发布并且发布时间小于当前时间的文章发布出去。这样就需要定时执行某个方法实现。

2.每天固定的时间点执行某个方法。

使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,本文是前文分类中的第二种方式:https://blog.csdn.net/zhouhaisunny/article/details/54669918

spring能够支持quartz作业类不继承特定基类这种方式,归功于两个类:

org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

实例:

spring项目中使用quartz定时执行任务_第1张图片

 pom.xml


  4.0.0
  com.citywy
  SpringTimer
  0.0.1-SNAPSHOT
  war
 
  
	  UTF-8
	  1.7
	  1.7
	  
	  4.2.5.RELEASE
  
 
  
    
       
           jstl
           jstl
           1.2
       
       
           javax
           javaee-api
           7.0
       
       
       
       
           org.springframework
           spring-core
           ${spring.version}
       
       
           org.springframework
           spring-web
           ${spring.version}
       
       
           org.springframework
           spring-oxm
           ${spring.version}
       
       
           org.springframework
           spring-tx
           ${spring.version}
       
       
           org.springframework
           spring-jdbc
           ${spring.version}
       
       
           org.springframework
           spring-webmvc
           ${spring.version}
       
       
           org.springframework
           spring-context
           ${spring.version}
       
       
           org.springframework
           spring-context-support
           ${spring.version}
       
       
           org.springframework
           spring-aop
           ${spring.version}
       
       
           org.springframework
           spring-test
           ${spring.version}
       
       
           org.springframework
           spring-jms
           ${spring.version}
       
       
        
		
		    org.quartz-scheduler
		    quartz
		    2.3.0
		
  
 
  
  		springtimer
  

web.xml



  
    encodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
    
      forceEncoding
      true
    
  
  
    encodingFilter
    /*
  
  springtimer
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
    springmvc
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springmvc.xml
    
  
  
    springmvc
    *.htm
  

springmvc.xml



		
		
		
		
		
		
			
			
		
	    

applicationContext-task.xml



	
	
	
	
		
		
		 
    
    
    
    
	
	
    	
    	
	
	
	
		
			
				
			
		
	

cronExpression即cron表达式自行百度,设定你的定时规则。 

MyTask.java

package com.citywy.util;

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

public class MyTask {
	public void task() throws InterruptedException{
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		System.out.println("任务调度类"+sdf.format(new Date()));
		//下面代码用来验证定时配置中这个配置起到的作用
		//案例:每隔5秒读取某表中的定时发布数据,如果有很多文章需要定时发布,那么第一个定时任务还在执行,第二个定时任务也来执行了,就会导致文章重复发布的问题!
		//结论:concurrent配置为false后,如果上一个定时任务还没执行完,下一个定时任务到达时会进入等待,一旦第一个执行完,下一个立刻执行,不会出现文章重复发布的情况。
//		Thread.sleep(8000);//休眠8秒
//		System.out.println("sleep结束:"+sdf.format(new Date()));
	}
}

不注释console:

任务调度类2019-03-24 11:49:40
sleep结束:2019-03-24 11:49:48
任务调度类2019-03-24 11:49:48
sleep结束:2019-03-24 11:49:56
任务调度类2019-03-24 11:49:56
sleep结束:2019-03-24 11:50:04
任务调度类2019-03-24 11:50:04

注释console:

任务调度类2019-03-24 11:50:40
任务调度类2019-03-24 11:50:45
任务调度类2019-03-24 11:50:50
任务调度类2019-03-24 11:50:55

下面这个类没用,就是测试项目搭的对不对-.-

TestController.java

package com.citywy.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class TestController {
	@RequestMapping("show")
	public ModelAndView show(HttpServletRequest request,HttpServletResponse response){
		ModelAndView res = new ModelAndView("index");
		System.out.println("come in");
		res.addObject("name","tarui瑞");
		return res;
	}
	
}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%> 





hello word

 
 
	

${name}

 

你可能感兴趣的:(Java,Spring,JAVA实用小方法)