Springboot异步任务线程池

文章目录

            • 1. 启动类添加@EnableAsync注解
            • 2. 异步方法添加@Async注解
            • 3. 自定义线程池以及线程池异常策略

1. 启动类添加@EnableAsync注解
package com.gblfy;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;@EnableAsync
@SpringBootApplication
public class JavaEscapeApplication {public static void main(String[] args) {SpringApplication.run(JavaEscapeApplication.class, args);}}
2. 异步方法添加@Async注解
package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;import java.util.concurrent.Future;@Slf4j
@Service
public class AsyncService {@Asyncpublic void asyncProcess01() throws Exception {log.info("AsyncService Start to asyncProcess01 ->{}", Thread.currentThread().getName());Thread.sleep(2000);log.info("AsyncService Start to asyncProcess01 ->{}", Thread.currentThread().getName());}@Asyncpublic Future<String> asyncProcess02() throws Exception {log.info("AsyncService Start to asyncProcess02->{}", Thread.currentThread().getName());Thread.sleep(2000);log.info("AsyncService Done to asyncProcess02->{}", Thread.currentThread().getName());return new AsyncResult<>("imooc");}@Asyncpublic void asyncProcess03()  {log.info("AsyncService Start to asyncProcess03->{}", Thread.currentThread().getName());throw new RuntimeException("throw exception asyncProcess03");}
}
3. 自定义线程池以及线程池异常策略
package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;/*** 自定义异步任务线程池*/
@Slf4j
@Configuration
public class AsyncTaskConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setThreadNamePrefix("cmiip-");executor.setCorePoolSize(15);executor.setMaxPoolSize(20);executor.setKeepAliveSeconds(5);executor.setQueueCapacity(100);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());executor.setWaitForTasksToCompleteOnShutdown(true);executor.setAwaitTerminationSeconds(60);executor.initialize();return executor;}@Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return new AsyncUncaughtExceptionHandler() {@Overridepublic void handleUncaughtException(Throwable ex, Method method, Object... params) {//                报警邮件,发短信等等log.error("async task some Error: {} ,{} , {}", ex.getMessage(),method.getDeclaringClass().getName() + "." + method.getName(),Arrays.toString(params));}};}
}

测试

package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;@Slf4j
@SpringBootTest
class AsyncServiceTest {@Autowiredprivate AsyncService asyncService;@Testvoid contextLoads() throws Exception {
//        asyncService.asyncProcess01();Future<String> future= asyncService.asyncProcess02();log.info("Async Process02 return :->{}", future.get(1, TimeUnit.SECONDS));}@Testvoid contextLoads2() throws Exception {asyncService.asyncProcess03();Thread.sleep(3000);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云首次在ASPLOS'19发布重磅论文:揭秘帮助ECS快速迭代的热升级技术

第24届ACM编程语言和操作系统&#xff08;ASPLOS19&#xff09;&#xff0c;于2019年4月13日至17日&#xff0c;在普罗维登斯召开&#xff0c;阿里云高级技术专家郑晓代表团队在会上发表了技术报告。 论文主题为《Fast and Scalable VMM Live Upgrade in Large Cloud Infrastr…

痛!做C#半年,挣的不如做AI1个月?”看到第二句泪目……

前段时间在网上发现一个热门话题&#xff1a;“做开发一年&#xff0c;在北京月薪不到1万&#xff0c;有点迷茫。” 其中&#xff0c;这个回答我永远忘不了&#xff1a;来源&#xff1a;库库的派派知乎回答&#xff0c;已取得授权在这短短的一条信息里&#xff0c;小编佩服不…

联想电脑u盘安装Linux,如何使用u盘安装linux系统

ps: 请注意&#xff0c;硬盘不是软盘7. 选择您的U盘作为硬盘驱动器&#xff0c;然后写入usb hdd 8. 点击[写]三&#xff0c;安装系统1. 将U盘插入计算机2. 启动计算机并按住[F2]进入BIOS以修改第一个启动项3. 选择U盘后&#xff0c;跳转到以下界面4. 按键盘键进入第二个“测试…

源码|详解分布式事务之 Seata-Client 原理及流程

前言 在分布式系统中&#xff0c;分布式事务是一个必须要解决的问题&#xff0c;目前使用较多的是最终一致性方案。自年初阿里开源了Fescar&#xff08;四月初更名为Seata&#xff09;后&#xff0c;该项目受到了极大的关注&#xff0c;目前已接近 8000 Star。Seata 以高性能和…

SonarQube中配置c语言/c++语言代码规则插件

文章目录一、下载安装重新启动1. 下载文件2.安装3. 重新启动SonarQube4. SonarQube管控台验证二、SonarQube管控台配置2.1. 创建配置模板2.2. 添加规则2.3. 查看配置模板规则列表2.4. 修改默认语言规则应用2.5. C配置流程同上我是java出身,因为特殊需要,要用sonarqube做一套c代…

从虚拟化前端Bug学习分析Kernel Dump

前言 也许大家都知道&#xff0c;分析 Kernel Dump 有个常用的工具叫 Crash&#xff0c;在我刚开始学习分析 Kernel Dump 的时候&#xff0c;总是花大量的时间折腾这个工具的用法&#xff0c;却总是记不住这个工具的功能。后来有一次在参加某次内部分享的时候&#xff0c;有位…

Apache Shiro RememberMe 1.2.4 反序列化过程命令执行漏洞【原理扫描】

文章目录一、分析定位1. 漏洞描述2. 项目引发漏洞简述二、 若依系统2.1. 版本升级2.2. 配置文件2.3. 推荐做法2.4. 栗子2.5. 项目场景三、Gus系统3.1. shiro版本升级3.2. 调用重新生成3.3. 生成工具类shiro漏洞补充&#xff1a;一、分析定位 1. 漏洞描述 目前厂商已经发布了新…

Linux系统json文件打中文,如何在 Linux 终端上漂亮地打印 JSON 文件

JSON 文件非常棒&#xff0c;因为它们以人类可读的格式存储数据集合。然而&#xff0c;如果 JSON 文件被最小化过&#xff0c;那么阅读 JSON 文件可能会很痛苦。• 来源&#xff1a;linux.cn • 作者&#xff1a;Abhishek Prakash • 译者&#xff1a;geekpi •(本文字数&#…

超级干货!31 条2020 年最新版 ZooKeeper面试题,先收藏再看!| 博文精选

作者| ThinkWon责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;金三银四&#xff0c;虽然受疫情影响&#xff0c;大多数企业还未正式复工&#xff0c;但没有条件&#xff0c;创造条件也要上&#xff0c;许多企业已经开始物色合适的人才了&#…

Node.js 应用故障排查手册 —— 雪崩型内存泄漏问题

楔子 实践篇一中我们也看到了一个比较典型的由于开发者不当使用第三方库&#xff0c;而且在配置信息中携带了三方库本身使用不到的信息&#xff0c;导致了内存泄漏的案例&#xff0c;实际上类似这种相对缓慢的 Node.js 应用内存泄漏问题我们总是可以在合适的机会抓取堆快照进行…

检测到远端X服务正在运行中

文章目录一、 漏洞详情二、 解决方案2.1. 方案1(推荐使用)2.2. 方案2一、 漏洞详情 二、 解决方案 2.1. 方案1(推荐使用) 既然漏洞是6000端口导致的&#xff0c;首先要分析linux6000端口是谁在用呢、又和什么程序有关&#xff1f;如果没有用直接关掉6000端口即可&#xff0c;…

Kubernetes从懵圈到熟练:读懂这一篇,集群节点不下线

排查完全陌生的问题&#xff0c;完全不熟悉的系统组件&#xff0c;是售后工程师的一大工作乐趣&#xff0c;当然也是挑战。今天借这篇文章&#xff0c;跟大家分析一例这样的问题。排查过程中&#xff0c;需要理解一些自己完全陌生的组件&#xff0c;比如systemd和dbus。但是排查…

linux十字符木马,Linux系统随机10字符病毒的清除

故障表现&#xff1a;登陆服务器执行sar –n DEV&#xff0c;查得向外流量输出达到120Mbit/s多&#xff0c;cacti显示占满总出口流量故障判断&#xff1a;关闭所有对外应用服务&#xff0c;即tomcat、nginx、vsftp&#xff0c;但关闭之后发现流量依然非常高使用Ps –ef和netsta…

面试还搞不懂Redis,快看看这40道面试题!| 博文精选

作者| 程序员追风责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;近年来&#xff0c;微服务变得越来越热门&#xff0c;越来越多的应用部署在分布式环境中。常用的分布式实现方式之一就有 Redis。对于想要年后换东家的程序员来说&#xff0c;如…

阿里新一代分布式任务调度平台Schedulerx2.0破土而出

1. 产品简介 Schedulerx2.0是阿里中间件自研的基于Akka架构的新一代分布式任务调度平台&#xff0c;提供定时、任务编排、分布式跑批等功能。使用Schedulerx2.0&#xff0c;您可以在控制台配置管理您的定时任务&#xff0c;查询历史执行记录&#xff0c;查看运行日志。借助Sch…

数据装载器连接其他oracle数据库_07

需求背景&#xff1a;数据加载器默认连接的是技术oracle数据库&#xff0c;但是&#xff0c;现在开发oracle数据库和回归oracle数据库也需要数据加载。 文章目录一、初始化前置准备二、配置指定监听三、调整配置文件二、执行数据加载声明&#xff1a;数据加载器只需要一台&…

浅谈 Spark 的多语言支持

作者&#xff1a;郑锴&#xff0c;花名铁杰&#xff0c;阿里巴巴高级技术专家&#xff0c;Apache Hadoop PMC&#xff0c;Apache Kerby 创立者。深耕分布式系统开发和开源大数据多年&#xff0c;先后专注在安全&#xff0c;存储和计算领域。之前在 Intel&#xff0c;目前转战阿…

阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?

轻松筹首创了“大病救助”模式&#xff0c;帮助了众多病患在第一时间解決了医疗资金等问题&#xff0c;为了从源头解决了医疗资金问题。而在轻松筹这样全球5.5亿用户信赖的大病筹款平台的背后&#xff0c;是日益增长的各种数据。面对这样数据量所造成的巨大挑战&#xff0c;阿里…

彻彻底底给你讲明白啥是SpringMvc异步处理

来源 | 编程新说责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;生活在这个世界上&#xff0c;我们必须承认任何事物都是运动变化着的&#xff0c;没有什么东西是一成不变的。不仅因为这句话是出自马克思主义哲学的唯物辩证法&#xff0c;而且事…

linux环境安装LFTP_02

安装&#xff1a; yum -y install lftp验证&#xff1a; sftp 用户名sftpIP地址 输入密码即可