SpringMVC的Java程序中,希望能定时执行一些任务,例如每隔一定时间,或者每天定时执行一个方法等等。
如果你使用的是SpringBoot,请参考:https://blog.terrynow.com/2021/07/10/java-spring-springboot-schedule-implement/
实现
SpringMVC中的配置要稍微比SpringBoot多一些配置
首选修改application-context.xml(这个文件可能会根据你web.xml里的contextConfigLocation的设置的不同,可以根据自己的实际情况修改)
头部引入命令空间:
xmlns:task="http://www.springframework.org/schema/task
增加xsd:
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
开启task注释的自动扫描装载
<task:annotation-driven/>
完整的application-context.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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 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/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> <context:annotation-config/> <task:annotation-driven /> </beans>
新建一个ScheduledTask.java 加上@Component注解
@Component public class ScheduledTask { private static final Log log = LogFactory.getLog(ScheduledTask.class); // 如果要操作数据库或者引入Service @Resource(name = "systemService") private ISystemService systemService; //每一分钟执行一次 @Scheduled(cron = "0 */1 * * * ?") public void test1() { // your code } @Scheduled(fixedDelay = 5000) public void test2() { // your code } /** * 每个10分的延后3分执行 * spring 的 cron 和 linux 的 cron 相比,好像spring多了第一位是秒 */ @Scheduled(cron = "0 3/10 * * * ?") public void test3() { // your code } /** * 每天凌晨1:04触发 */ @Scheduled(cron = "0 4 1 ? * *") public void test4() { // your code } }
里面的方法,就会根据Scheduled定义的规则排程执行了,关于cron详细解释,可以查看:
https://blog.terrynow.com/2021/07/10/java-spring-springboot-schedule-implement/
文章评论