如何在异步任务执行中维护请求范围
在Web应用程序中,执行需要使用bean的异步操作是很常见的与请求范围。在异步任务执行中启用请求范围可以通过实现自定义任务执行器来实现。
问题:
您拥有在 AsyncTaskExecutor 中启动处理的异步 Web 服务。但是,您需要在此处理中访问使用 @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) 注释的类。但是,您会收到异常,因为请求作用域在 SimpleAsyncTaskExecutor 中未处于活动状态。
解决方案:
要在异步任务执行中启用请求作用域,我们将实现执行以下步骤:
-
创建自定义任务执行器:
<code class="java">public class ContextAwarePoolExecutor extends ThreadPoolTaskExecutor { @Override public <t> Future<t> submit(Callable<t> task) { return super.submit(new ContextAwareCallable(task, RequestContextHolder.currentRequestAttributes())); } }</t></t></t></code>
-
实现上下文感知可调用:
<code class="java">public class ContextAwareCallable<t> implements Callable<t> { private Callable<t> task; private RequestAttributes context; public ContextAwareCallable(Callable<t> task, RequestAttributes context) { this.task = task; this.context = context; } @Override public T call() throws Exception { if (context != null) { RequestContextHolder.setRequestAttributes(context); } try { return task.call(); } finally { RequestContextHolder.resetRequestAttributes(); } } }</t></t></t></t></code>
-
配置自定义任务执行器:
<code class="java">@Configuration public class ExecutorConfig extends AsyncConfigurerSupport { @Override @Bean public Executor getAsyncExecutor() { return new ContextAwarePoolExecutor(); } }</code>
说明:
ContextAwarePoolExecutor 拦截提交的任务并将它们包装在 ContextAwareCallable 实例中。这些可调用对象在执行实际任务之前设置当前请求上下文,并在执行之后重置它。这确保了在异步执行期间可以访问请求范围的 bean。
注意:
- 此解决方案适用于会话范围和请求范围beans,但不适用于安全上下文。
- 可以创建并使用可运行的实现来代替execute() 方法的可调用实现。
以上是如何在异步任务执行中访问请求范围的 bean?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文分析了2025年的前四个JavaScript框架(React,Angular,Vue,Susve),比较了它们的性能,可伸缩性和未来前景。 尽管由于强大的社区和生态系统,所有这些都保持占主导地位,但它们的相对人口

本文介绍了SnakeyAml中的CVE-2022-1471漏洞,这是一个允许远程代码执行的关键缺陷。 它详细介绍了如何升级春季启动应用程序到Snakeyaml 1.33或更高版本的降低风险,强调了依赖性更新

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

Node.js 20通过V8发动机改进可显着提高性能,特别是更快的垃圾收集和I/O。 新功能包括更好的WebSembly支持和精制的调试工具,提高开发人员的生产率和应用速度。

本文使用lambda表达式,流API,方法参考和可选探索将功能编程集成到Java中。 它突出显示了通过简洁性和不变性改善代码可读性和可维护性等好处

本文探讨了在黄瓜步骤之间共享数据的方法,比较方案上下文,全局变量,参数传递和数据结构。 它强调可维护性的最佳实践,包括简洁的上下文使用,描述性


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版
SublimeText3 Linux最新版

记事本++7.3.1
好用且免费的代码编辑器

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1
功能强大的PHP集成开发环境