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);
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM