一、什么是定时任务?
我们在项目中遇到的需求: 需要定时送异步请求。
二、怎么实现?
2.1 mvc中启用定时任务。
<?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:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" 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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> <!--spring mvc的配置文件--> <!--开启mvc的注解--> <mvc:annotation-driven conversion-service="conversionService" > <!--配置转换器 转换日期的格式。--> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/> </bean> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!--配置日期转换器--> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.aaa.controller.DateConverter"/> </set> </property> </bean> <mvc:default-servlet-handler/> <!--扫描器:扫描控制器的注解--> <context:component-scan base-package="com.aaa.controller"/> <!--4.静态资源注解--> <mvc:default-servlet-handler/> <!--<mvc:resource mapping="/static/**" location="/static/"/>--> <!--3.视图解析器:进行视图解析 prefix+ 视图名字+suffix --> <!--5.文件上传的解析器 可以设置相关的属性。--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"/> <!--文件上传的大小:单位:字节--> <property name="maxUploadSize" value="#{10*1024*1024}"/> </bean> <!--<!– 异常处理 1. 配置解析器 –>--> <!--<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">--> <!--<!–1.1默认的错误视图 发生异常时, 跳转到的页面–>--> <!--<property name="defaultErrorView" value="error"/>--> <!--<!–1.2 异常的属性 捕获到的错误信息。–>--> <!--<property name="exceptionAttribute" value="ex"/>--> <!--<!–1.3exceptionMappings –>--> <!--<property name="exceptionMappings">--> <!--<props>--> <!--<prop key="异常类型1">--> <!--error1--> <!--</prop>--> <!--<prop key="异常类型2">--> <!--error2--> <!--</prop>--> <!--</props>--> <!--</property>--> <!--</bean>--> <!--6. 配置一个拦截器 --> <mvc:interceptors> <!--<mvc:interceptor>--> <!--<!– 拦截的路径 –>--> <!--<mvc:mapping path="/**"/>--> <!--<!– 配置拦截器的bean –>--> <!--<!– 放行路径 –>--> <!--<mvc:exclude-mapping path="/user/login"/>--> <!--<bean class="com.aaa.interceptors.MyIntercept"/>--> <!--</mvc:interceptor>--> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.aaa.interceptors.Demo02"/> </mvc:interceptor> </mvc:interceptors> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/"/> <!--视图前缀--> <property name="suffix" value=".jsp"/> <!--视图后缀--> </bean> <!--授权 --> <aop:config ></aop:config> <!--启用定时任务。 导包 spring frame word. org/schema/task--> <task:annotation-driven></task:annotation-driven> </beans>
2.2 控制层中创建SchController
package com.aaa.controller; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Controller; import java.text.SimpleDateFormat; import java.util.Date; /* * 定时任务? 需求: 1.定时发送异步请求 2.使用java计时器,自启动的servlet中,线程(Thread,Thread sleep) 使用 Schedule组件: 1.配置注解。 1.1 mvc中 启用定时任务。 1.2 导包 【spring frame word. org/schema/task】 1.3 创建控制器 加入 schedule的注解。 1.4 秒分时日月年。 / 代表 每的意思 “0/5 * * * * *” 就是每五秒执行一次。 * * */ @Controller public class SchController { @Scheduled(cron = "0/3 * * * * ?") public void task1(){ //日期格式的转换。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(); String nowTime = sdf.format(date); System.out.println("每三秒执行一次, 你好世界!"+nowTime); } }
2.3 属性说明。
2.4 字符含义
2.5 演示