zoukankan      html  css  js  c++  java
  • spring定时任务详解(@Scheduled注解)多线程讲解

    (一)在xml里加入task的命名空间

    <?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:task="http://www.springframework.org/schema/task" 
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd  
            http://www.springframework.org/schema/task 
            http://www.springframework.org/schema/task/spring-task-4.1.xsd">
    
        <task:annotation-driven />
    
    </beans>

    (二)启用注解驱动的定时任务

    <?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:task="http://www.springframework.org/schema/task" 
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd  
            http://www.springframework.org/schema/task 
            http://www.springframework.org/schema/task/spring-task-4.1.xsd">
    
        <task:annotation-driven />
    
    </beans>

    (三)定时任务

      Class : ATask

    package com.xindatai.ibs.liang;
    
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ATask implements IATask {
    
        @Scheduled(cron="0/10 * * * * ?")
        public void aTask() {
            try {
                Thread.sleep(20000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            DateFormat df = new SimpleDateFormat("HH:mm:ss");
            System.out.println(df.format(new Date()) + "********A任务每10秒执行一次进入测试");
        }
    
    }

      Class : BTask

    package com.xindatai.ibs.liang;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    @Component
    public class BTask implements IBTask {
    
        @Scheduled(cron="0/5 * * * * ?")
        public void bTask() {
            System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()) + "********B任务每5秒执行一次进入测试");
        }
    
    }

      Console : 

    20:11:50********A任务每10秒执行一次进入测试
    20:11:50********B任务每5秒执行一次进入测试
    20:11:55********B任务每5秒执行一次进入测试
    20:12:00********B任务每5秒执行一次进入测试
    20:12:20********A任务每10秒执行一次进入测试
    20:12:20********B任务每5秒执行一次进入测试
    20:12:25********B任务每5秒执行一次进入测试
    20:12:30********B任务每5秒执行一次进入测试
    20:12:50********A任务每10秒执行一次进入测试
    20:12:50********B任务每5秒执行一次进入测试
    20:12:55********B任务每5秒执行一次进入测试
    20:13:20********A任务每10秒执行一次进入测试
    20:13:20********B任务每5秒执行一次进入测试
    20:13:25********B任务每5秒执行一次进入测试
    20:13:50********A任务每10秒执行一次进入测试
    20:13:50********B任务每5秒执行一次进入测试
    20:13:55********B任务每5秒执行一次进入测试
    20:14:00********B任务每5秒执行一次进入测试
    20:14:20********A任务每10秒执行一次进入测试
    20:14:20********B任务每5秒执行一次进入测试
    20:14:25********B任务每5秒执行一次进入测试
    20:14:30********B任务每5秒执行一次进入测试
    20:14:50********A任务每10秒执行一次进入测试
    20:14:50********B任务每5秒执行一次进入测试
    20:14:55********B任务每5秒执行一次进入测试
    20:15:20********A任务每10秒执行一次进入测试
    20:15:20********B任务每5秒执行一次进入测试
    20:15:25********B任务每5秒执行一次进入测试
    20:15:30********B任务每5秒执行一次进入测试
    20:15:50********A任务每10秒执行一次进入测试
    20:15:50********B任务每5秒执行一次进入测试
    20:15:55********B任务每5秒执行一次进入测试
    20:16:00********B任务每5秒执行一次进入测试
    20:16:20********A任务每10秒执行一次进入测试
    20:16:20********B任务每5秒执行一次进入测试
    20:16:25********B任务每5秒执行一次进入测试
    20:16:30********B任务每5秒执行一次进入测试
    20:16:50********A任务每10秒执行一次进入测试
    20:16:50********B任务每5秒执行一次进入测试
    20:16:55********B任务每5秒执行一次进入测试
    20:17:20********A任务每10秒执行一次进入测试
    20:17:20********B任务每5秒执行一次进入测试
    20:17:25********B任务每5秒执行一次进入测试
    20:17:30********B任务每5秒执行一次进入测试
    20:17:50********A任务每10秒执行一次进入测试
    20:17:50********B任务每5秒执行一次进入测试
    20:17:55********B任务每5秒执行一次进入测试
    20:18:20********A任务每10秒执行一次进入测试
    20:18:20********B任务每5秒执行一次进入测试
    20:18:25********B任务每5秒执行一次进入测试
    20:18:50********A任务每10秒执行一次进入测试
    20:18:50********B任务每5秒执行一次进入测试
    20:18:55********B任务每5秒执行一次进入测试
    20:19:00********B任务每5秒执行一次进入测试
    20:19:20********A任务每10秒执行一次进入测试
    20:19:20********B任务每5秒执行一次进入测试
    20:19:25********B任务每5秒执行一次进入测试
    20:19:30********B任务每5秒执行一次进入测试
    20:19:50********A任务每10秒执行一次进入测试
    20:19:50********B任务每5秒执行一次进入测试
    20:19:55********B任务每5秒执行一次进入测试
    20:20:20********A任务每10秒执行一次进入测试
    20:20:20********B任务每5秒执行一次进入测试
    20:20:25********B任务每5秒执行一次进入测试
    20:20:50********A任务每10秒执行一次进入测试
    20:20:50********B任务每5秒执行一次进入测试
    20:20:55********B任务每5秒执行一次进入测试
    20:21:00********B任务每5秒执行一次进入测试
    20:21:20********A任务每10秒执行一次进入测试
    20:21:20********B任务每5秒执行一次进入测试
    20:21:25********B任务每5秒执行一次进入测试
    20:21:50********A任务每10秒执行一次进入测试
    20:21:50********B任务每5秒执行一次进入测试
    20:21:55********B任务每5秒执行一次进入测试
    20:22:20********A任务每10秒执行一次进入测试
    20:22:20********B任务每5秒执行一次进入测试
    20:22:25********B任务每5秒执行一次进入测试
    20:22:30********B任务每5秒执行一次进入测试
    20:22:50********A任务每10秒执行一次进入测试
    20:22:50********B任务每5秒执行一次进入测试
    20:22:55********B任务每5秒执行一次进入测试
    20:23:00********B任务每5秒执行一次进入测试
    20:23:20********A任务每10秒执行一次进入测试
    20:23:20********B任务每5秒执行一次进入测试
    20:23:25********B任务每5秒执行一次进入测试

    spring的定时任务默认是单线程多个任务执行起来时间会有问题:B任务会因为A任务执行起来需要20S而被延后20S执行

    (一)在xml里加入task的命名空间

    (二)启用注解驱动的定时任务

    <?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:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd  
            http://www.springframework.org/schema/task 
            http://www.springframework.org/schema/task/spring-task-4.1.xsd">
    
        <!-- 启用annotation方式 -->
        <task:annotation-driven scheduler="myScheduler" />
    
        <!-- 配置任务线程池 -->
        <task:scheduler id="myScheduler" pool-size="5" />
    
    </beans>

      Console : 

    啦啦啦

    啦啦啦

    啦啦啦

    啦啦啦

    package com.xindatai.ibs.liang;
    import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;
    import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;
    @Componentpublic class ATask implements IATask {
    @Scheduled(cron="0/10 * * * * ?")public void aTask() {try {Thread.sleep(20000);} catch (InterruptedException e) {e.printStackTrace();}DateFormat df = new SimpleDateFormat("HH:mm:ss");System.out.println(df.format(new Date()) + "********A任务每10秒执行一次进入测试");}
    }

  • 相关阅读:
    Golang的math包常用方法
    部署tomcat部署实战案例
    CentOS 7.6操作系统部署JDK实战案例
    Linux防火墙iptables命令管理入门
    Docker镜像-基于DockerFile制作编译版nginx镜像
    使用Docker快速部署Mysql服务器
    Docker镜像-基于DockerFile制作yum版nginx镜像
    Docker镜像-手动制作yum版nginx镜像
    Docker容器操作基础命令
    Docker镜像管理篇
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/6635189.html
Copyright © 2011-2022 走看看