/** * 装饰MDC 内容传递 */ public class MDCTaskDecorator implements TaskDecorator { @Override public Runnable decorate(Runnable runnable) { Map<String, String> contextMap = MDC.getCopyOfContextMap(); // 对Runnable进行装饰,将主线程的MDC内容设置到子线程的MDC中 return new Runnable() { @Override public void run() { try { MDC.setContextMap(contextMap); runnable.run(); } finally { MDC.clear(); } } }; } }
/** * 通过实现 AsyncConfigurer 自定义异步任务线程池,包含异常处理 */ @Component @Slf4j public class CustomAsyncConfigurer implements AsyncConfigurer { /** * 核心线程数 */ @Value("${thread.pool.corePoolSize:10}") private Integer corePoolSize; /** * 最大线程数 * 注:因该线程池主要用于异步将订单结算信息入库,此操作属IO密集型,所以最大线程数可以适当大一些; * 假设每个任务执行50ms,则一个线程1s可执行20个任务,100个线程1s可执行2000个任务 */ @Value("${thread.pool.maxPoolSize:100}") private Integer maxPoolSize; /** * 队列容量 */ @Value("${thread.pool.queueCapacity:15000}") private Integer queueCapacity; @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(corePoolSize); taskExecutor.setMaxPoolSize(maxPoolSize); taskExecutor.setQueueCapacity(queueCapacity); taskExecutor.setWaitForTasksToCompleteOnShutdown(true); taskExecutor.setThreadFactory(new NamedThreadFactory("checkout")); taskExecutor.setTaskDecorator(new MDCTaskDecorator());//task装饰【重点】 taskExecutor.initialize(); return taskExecutor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { // 针对标注 @Async 的方法内出现的异常会进入该异常处理器 return new AsyncUncaughtExceptionHandler() { @Override public void handleUncaughtException(Throwable ex, Method method, Object... params) { log.error("线程池执行任务发生异常.", ex); for (Object param : params) { log.info("Parameter value - " + param); } } }; } }
来源 :https://www.csdn.net/gather_2b/Mtjagg0sMjk0OTctYmxvZwO0O0OO0O0O.html
相关推荐
一份springcloud链路追踪的demo源码,包括了在不使用rabbitmq的情况下得到链路追踪demo和使用了rabbitmq的情况下的链路追踪demo,其中app1,app2使用了rabbitmq的demo,app3,app4未未使用rabbitmq的demo,
springmvc+spring线程池处理http并发请求数据同步控制问题
ActiveMQ与Spring线程池整合的一个实例。 lib库没有上传。 对于实例的讲解,在竹子的论坛有我对这个实例的帖子(http://www.java2000.net/viewthread.jsp?tid=1167) lib中包含: apache-activemq-4.1.1.jar ...
线程池例子线程池例子线程池例子线程池例子
Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志。这篇文章主要介绍了SpringBoot+Logback实现一个简单的链路追踪功能,需要的朋友可以参考下
SpringCloud链路追踪-Spring Cloud Sleuth 和 Zipkin 介绍 & Windows 下使用初步
NULL 博文链接:https://hoochiang.iteye.com/blog/2249733
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户网页应用程序中体现的尤为突出。对数据库连接的管理能显著影响到整个应用的伸缩性和健壮性,影响到程序的性能指标。
Spring中的同步执行器 1. SyncTaskExecutor:同步可以用SyncTaskExecutor,但这个可以说不算一个线程池,因为还在原线程执行。这个类没有实现异步调用,只是一个同步操作。 2.也可以用ThreadPoolTaskExecutor结合...
主要介绍了SpringCloud链路追踪组件Sleuth配置方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Spring 线程池 demo
史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring Cloud Sleuth).pdf史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring Cloud Sleuth).pdf史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring ...
史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring Cloud Sleuth).docx史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring Cloud Sleuth).docx史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring...
毕业设计基于SpringCloud微服务分布式链路追踪系统源码 追踪实现 使用zipkin+sleuth实现 这个是比较成熟的分布式链路追踪实现方案 拦截器自定义实现 基于Google Dapper 论文,进行自定义实现。 原理: traceId :...
随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位...
最代码,http://www.zuidaima.com/share/1724478138158080.htm 的代码及例子
NULL 博文链接:https://bijian1013.iteye.com/blog/2368708
spring cloud sleuth 全链路追踪
spring cloud sleuth 全链路追踪数据表
springcloud集成skywalking实现全链路追踪的完整代码,源码下载后简单修改下连接参数之后即可运行