• 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);
        }
    
    }
  • 相关阅读:
    js实现完美身份证号有效性验证
    jQuery cookie操作
    脚本化HTTP
    if (HttpContext.Current.User.Identity.IsAuthenticated) 权限验证总是true
    装了appserv之后,浏览器中访问localhost加载不了
    rdlc报表的导出及预览时表头
    oracle中的to_number在mysql中的转换
    GIRDVIEW 控件绑定数据后 后台c#控制隐藏某列
    mysql、oracle 中按照拼音首字母排序
    阅读《大道至简第一章》读后感(java伪代码)
  • 原文地址:https://www.cnblogs.com/hk-zsg/p/11456514.html
Copyright © 2020-2023  润新知