Spring Task


1、定时任务

业务场景:

1) 每天凌晨备份数据

2) 每个月清空一下日志

3) 页面上投放的广告,每个月过期

4) 每三个月清空一下cookie

定时任务:某个功能、业务,需要在规定的时间内,频度、间隔运行

2、三种

1) java自带的API:

java.util.Timer类 定时器类

java.util.TimerTask类 定时任务类

可以实现指定频度间隔运行、不能在指定时间运行

2) Quartz框架 开源 功能强大 使用起来稍显复杂

3) Spirng3.0 以后自带的task调度工具,比Quartz更加简单方便

二、开发环境准备

1) 创建一个javaweb工程 (maven工程)

2) 引入相关就jar包

pom: spring-context spring-web

3) 基本的配置

web.xml 中配置Spring监听器

<web-app>
      <!-- Spring配置文件位置 -->
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
      <!-- Spring核心监听器 -->
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    </web-app>

接口和实现类:

public interface TaskService {

        void firstTask();

        void secondTask();

    }


    public class TaskServiceImpl implements TaskService {

        @Override
        public void firstTask() {
            System.out.println(new Date()+":这是第一个定时任务");
        }

        @Override
        public void secondTask() {
            System.out.println(new Date() + ":这是第二个定时任务");
        }

    }

三、如何使用Spring Task

1) 纯xml配置的方式

a.简单定时任务

实现业务功能+配置定时规则

<bean id="taskService" class="service.TaskServiceImpl"></bean>

        <!-- 配置定时任务 -->
        <task:scheduled-tasks>
        <!--
        ref:指定bean 
        method:指定bean中的方法
        initial-delay:服务器启动后多长毫秒开始执行
        fixed-delay:每隔多少毫秒执行
         -->
            <task:scheduled ref="taskService" method="firstTask" initial-delay="1000" fixed-delay="1000"/>
            <task:scheduled ref="taskService" method="secondTask" initial-delay="2000" fixed-delay="3000"/>
        </task:scheduled-tasks>

b.复杂定时任务

corn表达式:

<bean id="taskService" class="service.TaskServiceImpl"></bean>

        <!-- 配置定时任务 -->
        <task:scheduled-tasks>
            <task:scheduled ref="taskService" method="firstTask" cron="*/5 * * * * ?"/>
            <!-- 每天21点37分执行一次 -->
            <task:scheduled ref="taskService" method="secondTask" cron="0 37 21 * * ?"/>
        </task:scheduled-tasks>

2)全注解的方式

a. 在业务方法上提供注解

b. 开启注解支持

实现类:

@Service
    public class TaskServiceImpl implements TaskService {

    //    @Scheduled(initialDelay=1000, fixedDelay=1000)
        @Scheduled(cron="*/5 * * * * ?")
        @Override
        public void firstTask() {
            System.out.println(new Date()+":这是第1个定时任务");
        }

    //    @Scheduled(initialDelay=2000, fixedDelay=3000)
        @Scheduled(cron="* 7 22 * * ?")
        @Override
        public void secondTask() {
            System.out.println(new Date() + ":这是第2个定时任务");
        }

    }

applicationContext.xml

<!-- 扫描注解包路径 -->
        <context:component-scan base-package="service"></context:component-scan>

        <!-- 开启对@Scheduled注解的支持 -->
        <task:annotation-driven/>

四、在SpringBoot中实现定时任务

@Component
    public class MyTask {
    //    @Scheduled(initialDelay=1000, fixedDelay=1000)
        @Scheduled(cron="*/5 * * * * ?")
        public void firstTask() {
            System.out.println(new Date()+":这是第1个定时任务");
        }

    //    @Scheduled(initialDelay=2000, fixedDelay=3000)
        @Scheduled(cron="* 25 23 * * ?")
        public void secondTask() {
            System.out.println(new Date() + ":这是第2个定时任务");
        }
    }


    @SpringBootApplication
    @EnableScheduling
    public class SpringBookTaskApplication {

        public static void main(String[] args) {
            SpringApplication.run(SpringBookTaskApplication.class, args);
        }

    }


原文链接:https://www.cnblogs.com/hk-zsg/p/11456514.html