新增一个配置文件springmvc-task.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
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
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<!-- 启动定时任务 -->
<task:annotation-driven/>
</beans>
web.xml中的配置
<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,classpath:springmvc-task.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
定时任务的处理类
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
/**
* 物流查询定时任务
* @author zhengzx
* @since 2019.03.01
*
*/
@Component
public class ExpressSearchTask
{
@Resource(name = "threadPoolTaskExecutor")
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@Scheduled(cron= "10 * * * * ?")
public void searchExpressInfo()
{
System.out.println("task");
}
}
这里之所以没有直接放到spring的配置文件中是因为:
第一次:web容器启动的时候,读取applicationContext.xml(或者别的Spring核心配置文件)文件时,会加载一次。
第二次:Spring本身会加载applicationContext.xml(或者别的Spring核心配置文件)一次。
其次有这样的配置:
<servlet-name>rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
这中间的<init-param>标签内容是跟 contextConfigLocation的配置重复的,会再次重复初始化,本人第一次配的时候是初始化了三个定时任务。
参照:https://josh-persistence.iteye.com/blog/1984331