最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解SpringBoot Schedule配置

 更新時(shí)間:2017年03月22日 09:55:49   作者:slimer  
本篇文章主要介紹了詳解SpringBoot Schedule配置 ,可以實(shí)現(xiàn)定時(shí)任務(wù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

1. 定時(shí)任務(wù)實(shí)現(xiàn)方式

定時(shí)任務(wù)實(shí)現(xiàn)方式:

  1. Java自帶的java.util.Timer類,這個(gè)類允許你調(diào)度一個(gè)java.util.TimerTask任務(wù)。使用這種方式可以讓你的程序按照某一個(gè)頻度執(zhí)行,但不能在指定時(shí)間運(yùn)行。一般用的較少,這篇文章將不做詳細(xì)介紹。
  2. 使用Quartz,這是一個(gè)功能比較強(qiáng)大的的調(diào)度器,可以讓你的程序在指定時(shí)間執(zhí)行,也可以按照某一個(gè)頻度執(zhí)行,配置起來稍顯復(fù)雜,有空介紹。
  3. SpringBoot自帶的Scheduled,可以將它看成一個(gè)輕量級的Quartz,而且使用起來比Quartz簡單許多,本文主要介紹。

定時(shí)任務(wù)執(zhí)行方式:

  1. 單線程(串行)
  2. 多線程(并行)

2. 創(chuàng)建定時(shí)任務(wù)

package com.autonavi.task.test;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Component;

import com.autonavi.task.ScheduledTasks;

@Component

public class ScheduledTest {

  private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class); 

  @Scheduled(cron="0 0/2 * * * ?") 

  public void executeFileDownLoadTask() { 

    // 間隔2分鐘,執(zhí)行任務(wù)   

    Thread current = Thread.currentThread(); 

    System.out.println("定時(shí)任務(wù)1:"+current.getId());

    logger.info("ScheduledTest.executeFileDownLoadTask 定時(shí)任務(wù)1:"+current.getId()+ ",name:"+current.getName());

  }

} 

@Scheduled 注解用于標(biāo)注這個(gè)方法是一個(gè)定時(shí)任務(wù)的方法,有多種配置可選。cron支持cron表達(dá)式,指定任務(wù)在特定時(shí)間執(zhí)行;fixedRate以特定頻率執(zhí)行任務(wù);fixedRateString以string的形式配置執(zhí)行頻率。

3. 啟動定時(shí)任務(wù)

@SpringBootApplication

@EnableScheduling

public class App { 

  private static final Logger logger = LoggerFactory.getLogger(App.class); 

  public static void main(String[] args) {

    SpringApplication.run(App.class, args);   

    logger.info("start");            

  }  

} 

其中 @EnableScheduling 注解的作用是發(fā)現(xiàn)注解@Scheduled的任務(wù)并后臺執(zhí)行。

Springboot本身默認(rèn)的執(zhí)行方式是串行執(zhí)行,也就是說無論有多少task,都是一個(gè)線程串行執(zhí)行,并行需手動配置

4. 并行任務(wù)

繼承SchedulingConfigurer類并重寫其方法即可,如下:

@Configuration

@EnableScheduling

public class ScheduleConfig implements SchedulingConfigurer {

  @Override

  public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

    taskRegistrar.setScheduler(taskExecutor());

  } 

  @Bean(destroyMethod="shutdown")

  public Executor taskExecutor() {

    return Executors.newScheduledThreadPool(100);

  }

} 

再次執(zhí)行之前的那個(gè)Demo,會欣然發(fā)現(xiàn)已經(jīng)是并行執(zhí)行了!   

5. 異步并行任務(wù)

import org.springframework.scheduling.TaskScheduler;

import org.springframework.scheduling.annotation.AsyncConfigurer;

import org.springframework.scheduling.annotation.EnableAsync;

import org.springframework.scheduling.annotation.EnableScheduling;

import org.springframework.scheduling.annotation.SchedulingConfigurer;

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

import org.springframework.scheduling.config.ScheduledTaskRegistrar;

 

@Configuration

@EnableScheduling

@EnableAsync(

mode = AdviceMode.PROXY, proxyTargetClass = false,

order = Ordered.HIGHEST_PRECEDENCE

)

@ComponentScan(

basePackages = "hello"

)

public class RootContextConfiguration implements

AsyncConfigurer, SchedulingConfigurer {

@Bean

public ThreadPoolTaskScheduler taskScheduler()

{

ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();

scheduler.setPoolSize(20);

scheduler.setThreadNamePrefix("task-");

scheduler.setAwaitTerminationSeconds(60);

scheduler.setWaitForTasksToCompleteOnShutdown(true);

return scheduler;

}

 

@Override

public Executor getAsyncExecutor()

{

Executor executor = this.taskScheduler();

return executor;

}

 

@Override

public void configureTasks(ScheduledTaskRegistrar registrar)

{

TaskScheduler scheduler = this.taskScheduler();

registrar.setTaskScheduler(scheduler);

}

} 

在啟動的main方法加入額外配置:

@SpringBootApplication

public class Application { 

  public static void main(String[] args) throws Exception {

   AnnotationConfigApplicationContext rootContext =

   new AnnotationConfigApplicationContext();

 

  rootContext.register(RootContextConfiguration.class);

  rootContext.refresh();

  }

} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談一下Java中的ReentrantLock

    淺談一下Java中的ReentrantLock

    這篇文章主要介紹了淺談一下Java中的ReentrantLock,這個(gè)類是JUC工具包中對線程安全問題提供的一種解決方案,它主要是用來給對象上鎖,保證同一時(shí)間這能有一個(gè)線程在訪問當(dāng)前對象,需要的朋友可以參考下
    2023-09-09
  • 關(guān)于Spring Boot和Kotlin的聯(lián)合開發(fā)

    關(guān)于Spring Boot和Kotlin的聯(lián)合開發(fā)

    這篇文章主要介紹了關(guān)于Spring Boot和Kotlin的聯(lián)合開發(fā),需要的朋友可以參考下
    2017-06-06
  • idea查看properties中文變成unicode碼的解決方案

    idea查看properties中文變成unicode碼的解決方案

    這篇文章主要介紹了idea查看properties中文變成unicode碼的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java字符編碼簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    Java字符編碼簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java字符編碼簡介,本文主要包括以下幾個(gè)方面:編碼基本知識,Java,系統(tǒng)軟件,url,工具軟件等,感興趣的朋友一起看看吧
    2017-08-08
  • java實(shí)現(xiàn)Fibonacci算法實(shí)例

    java實(shí)現(xiàn)Fibonacci算法實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)Fibonacci算法的方法,以實(shí)例形式較為詳細(xì)的分析了java實(shí)現(xiàn)Fibonacci算法的原理與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Mybatis模糊查詢和動態(tài)sql語句的用法

    Mybatis模糊查詢和動態(tài)sql語句的用法

    今天小編就為大家分享一篇關(guān)于Mybatis模糊查詢和動態(tài)sql語句的用法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MyBatis中動態(tài)sql的實(shí)現(xiàn)方法示例

    MyBatis中動態(tài)sql的實(shí)現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于MyBatis中動態(tài)sql的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 聊聊Lombok中的@Builder注解使用教程

    聊聊Lombok中的@Builder注解使用教程

    @Builder注解的作用主要是用來生成對象,并且可以為對象鏈?zhǔn)劫x值。接下來通過本文給大家介紹Lombok中的@Builder注解使用教程,感興趣的朋友一起看看吧
    2021-11-11
  • netty?pipeline中的inbound和outbound事件傳播分析

    netty?pipeline中的inbound和outbound事件傳播分析

    這篇文章主要為大家介紹了netty?pipeline中的inbound和outbound事件傳播分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 解決mybatis使用foreach批量insert異常的問題

    解決mybatis使用foreach批量insert異常的問題

    這篇文章主要介紹了解決mybatis使用foreach批量insert異常的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

文水县| 蒙阴县| 孝感市| 海林市| 安乡县| 襄垣县| 宜良县| 吴川市| 岢岚县| 扎赉特旗| 天全县| 介休市| 广丰县| 隆安县| 东光县| 甘洛县| 嘉义县| 麻江县| 汾西县| 贵港市| 乌拉特前旗| 公主岭市| 临西县| 瓮安县| 韶关市| 张家口市| 麻城市| 南通市| 醴陵市| 宝应县| 金湖县| 边坝县| 南皮县| 大安市| 卢氏县| 江陵县| 安远县| 远安县| 禄丰县| 泰兴市| 鄂伦春自治旗|