基於Spring schedule實現多線程併發定時調度

方案一:兩個任務之間是併發的,單個任務是串行的

1.在定時調度類上添加以下註解

              @Component @EnableScheduling(開啓定時)

             

2. 配置spring-service

         

  <!--task任務掃描註解-->
    <task:annotation-driven  executor="myExecutor" scheduler="myScheduler"/>
     <!-- 執行線程池配置 -->
    <!--某個任務如果要異步的執行時,實現當前任務內的多線程併發。-->
   <task:scheduler id="myScheduler"  />
    <!-- 調度線程池配置 -->
    <!-- 根據任務總數來分配調度線程池的大小-->
    <task:executor id="myExecutor" pool-size="2"/>

3.在調度類中需要調度的方法添加@Schedule註解,並使用cron表達式

     

    @Scheduled(cron = "0 */1 * * * ?")
    public void queryDatasFromDtu(){
        logger.info("***********querystart******************");
        logger.info("Thread:"+Thread.currentThread().getName()+" time:"+new Date());
    }

  

 @Scheduled(cron = "0 */1 * * * ?")
    public void timerAddPhoto(){
        logger.info("***********phototstart******************");
        logger.info("Thread:"+Thread.currentThread().getName()+" time:"+new Date());
}

方案二:每個任務各自多線程異步執行

    spring-service:

  <!--task任務掃描註解-->
    <task:annotation-driven   scheduler="myScheduler"/>
     <!-- 執行線程池配置 -->
    <!--某個任務如果要異步的執行時,實現當前任務內的多線程併發。-->
   <task:scheduler id="myScheduler" pool-size="2" />
  

 在定時方法上添加@Async("myScheduler")註解

  該方案適合某個方法執行時間過長,以至於到了下一次執行時間仍然未執行完畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章