SpringBoot異步任務(wù)

1. pom文件里依賴這個包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

2.應(yīng)用啟動類添加@EnableAsync注解

@SpringBootApplication
@EnableAsync
public class SpringBootStudyApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootStudyApplication.class);
    }
}

3.配置異步任務(wù)線程池

由于默認的異步任務(wù)會開啟始終會一個新的線程拗胜,不利于資源的重復(fù)利用灵汪,所以檀训,要編寫一個異步任務(wù)的線程池

//AsyncPoolConfig.java
@Configuration
public class AsyncPoolConfig implements AsyncConfigurer {
    private final Logger logger = LoggerFactory.getLogger(MyAsyncTask.class);

    @Bean
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);// 設(shè)置核心線程池線程的數(shù)量,默認是1
        executor.setMaxPoolSize(20); // 線程池最大的線程數(shù)量享言,當(dāng)核心線程都被用光峻凫,且緩沖隊列是滿的之后才申請
        executor.setQueueCapacity(20); // 緩沖隊列中任務(wù)的個數(shù)
        executor.setKeepAliveSeconds(60); // 超出核心線程數(shù)的其他線程在空閑時的最大的存活時間
        executor.setThreadNamePrefix("frank_"); //線程池中的線程名稱前綴

        executor.setWaitForTasksToCompleteOnShutdown(true);//程序關(guān)閉后,是否等待異步任務(wù)完成, 等待的時間需要配置览露, 默認false荧琼,
        executor.setAwaitTerminationSeconds(60);// 等待的時間,默認0

        //拒絕策略 線程池中的最大線程線程數(shù)用光,且緩沖隊列也滿了命锄,可以選擇的策略
        // DiscardPolicy: 丟棄需要添加的新的任務(wù)
        // AbortPolicy: 直接拋出異常
        // DiscardOldestPolicy: 丟棄阻塞隊列的隊頭任務(wù)
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
        return executor;
    }

    //異步任務(wù)異常處理類,只會處理沒有返回值的異步任務(wù)的異常
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new AsyncExceptionHandler();
    }

    class AsyncExceptionHandler implements AsyncUncaughtExceptionHandler{
        @Override
        public void handleUncaughtException(Throwable throwable, Method method, Object... objects) {
            logger.info("AsyncException:{}, Method:{}, Params:{}", throwable, method, objects);

            throwable.printStackTrace();
            //TODO 發(fā)送郵件或者短信
        }
    }
}

4.編寫異步任務(wù)

@Component
public class MyAsyncTask {
    private final Logger logger = LoggerFactory.getLogger(MyAsyncTask.class);

    @Async("getAsyncExecutor")
    public void asyncProcess() throws InterruptedException {
        logger.info("async process task, current thread name -> {}", Thread.currentThread().getName());
        Thread.sleep(10000);
        //int a = 1/0;
    }

    @Async("getAsyncExecutor")
    public Future<Integer> asyncProcessHasReturn() throws InterruptedException {
        logger.info("async process task(has return), current thread name -> {}", Thread.currentThread().getName());
        Thread.sleep(10000);
        //int a = 1/0;
        return new AsyncResult<>(100);
    }
}

5.使用

@Autowired
private MyAsyncTask myAsyncTask;

logger.info("current thread name:", Thread.currentThread().getName());
myAsyncTask.asyncProcess();
Future<Integer> result = myAsyncTask.asyncProcessHasReturn();
logger.info("reuslt:{}", result.get(1, TimeUnit.SECONDS));//1s后定時任務(wù)沒執(zhí)行完就拋異常
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堰乔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脐恩,更是在濱河造成了極大的恐慌镐侯,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驶冒,死亡現(xiàn)場離奇詭異苟翻,居然都是意外死亡,警方通過查閱死者的電腦和手機骗污,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門崇猫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人需忿,你說我怎么就攤上這事诅炉∥堇澹” “怎么了涕烧?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澈魄。 經(jīng)常有香客問我景鼠,道長仲翎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任铛漓,我火速辦了婚禮溯香,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浓恶。我一直安慰自己玫坛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布包晰。 她就那樣靜靜地躺著湿镀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伐憾。 梳的紋絲不亂的頭發(fā)上勉痴,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音树肃,去河邊找鬼蒸矛。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雏掠。 我是一名探鬼主播斩祭,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乡话!你這毒婦竟也來了摧玫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤绑青,失蹤者是張志新(化名)和其女友劉穎席赂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體时迫,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡颅停,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掠拳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癞揉。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖溺欧,靈堂內(nèi)的尸體忽然破棺而出喊熟,到底是詐尸還是另有隱情,我是刑警寧澤姐刁,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布芥牌,位于F島的核電站,受9級特大地震影響聂使,放射性物質(zhì)發(fā)生泄漏壁拉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一柏靶、第九天 我趴在偏房一處隱蔽的房頂上張望弃理。 院中可真熱鬧,春花似錦屎蜓、人聲如沸痘昌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辆苔。三九已至,卻和暖如春扼劈,著一層夾襖步出監(jiān)牢的瞬間驻啤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工测僵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留街佑,地道東北人谢翎。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像沐旨,于是被迫代替她去往敵國和親森逮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容