问题标签 [spring-async]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 引导@Async:使用spring创建1000个线程的最佳方法是什么
我需要以多线程方式处理 6 亿条记录,每个请求需要 5-6 秒。在启动应用程序中,我需要创建 1000 个线程,但 tomcat 仅支持 200 个。最好的方法是什么?
spring-data-jpa - Spring @TransactionalEventListener 的集中式错误处理程序
有没有办法为带有注释的方法指定集中式错误处理程序@TransactionalEventListener
,因为我想将某些异常定向到特定的记录器。
任何建议将不胜感激。
谢谢和问候,吉姆
java - 从 Spring Boot 资源执行和处理 Void @Async 操作
Java 8 和 Spring Boot 2.x 在这里。我有一个 RESTful 资源,它将启动一个长时间运行的操作,在某些情况下可能需要 15 到 20 分钟才能完成。我想我想@Async
在服务层中利用注释,但我愿意接受任何好的、优雅的 Spring Boot-savvy 解决方案!
迄今为止我最好的尝试:
我想我已经接近了,但我正在努力解决:
- 如何正确调用
fizzbuzzService.runAsync(...)
,使其实际异步运行,并使其ResponseEntity.ok().build()
下方立即运行,而不是像其他情况下那样等待约 15 分钟;和 - 如何
fizzbuzzList.remove(...)
在异步服务方法完成后立即运行(同样,大约 15 到 20 分钟后),但不能更早!和 - 也许在异步操作上配置某种类型的超时,例如 30 分钟后失败并出现异常
谁能发现我哪里出错了?
spring-boot - 为什么 Spring Boot @Async 在我的 List 参数中删除项目?
我在@Async
方法注释中遇到了某种线程问题,其中一个参数包含一个List
枚举并且正在删除项目。清单很小,只有 2 项。物品的掉落不是立即的,但有时需要数小时或数天才能出现。
这是我们程序的一般流程:
A在其方法中Controller
生成上述,将列表传递给一个类,该类调用数据库进行批处理,并为数据库中的每个项目触发一个事件,传递列表。这个列表最终被传递到一个方法中,该方法然后删除第一个项目或两个项目。List
@RequestMapping
Service
@Async
代码配置和基本示例:
我们将其配置为具有 2 个线程:
这是尝试触发核心问题的本地副本,但没有运气:
如果我们仔细研究一下,我有一个控制器来模拟前面提到的Controller
和。Service
它遍历一批数据,一遍又一遍地发送相同的列表。另一个类中有一个 aync 方法来测试列表是否相同。我无法在本地复制该问题,但这是核心问题。
据我所知,Java 是按引用传递的,传递给方法的每个变量都会在堆栈中获得自己的指针,指向内存中的该引用,但不要认为它会导致我们耗尽内存。我们在 PCF 中运行,在此期间看不到任何内存峰值或任何东西。内存保持在 50% 左右。我也尝试使用CopyOnWriteArrayList
(线程安全)代替,ArrayList
但问题仍然存在。
问题:
知道为什么该@Async
方法会在方法参数中删除项目吗?列表在构建后永远不会被修改,那么为什么项目会消失呢?为什么第一项总是消失?为什么不是第二项?为什么两者都会消失?
编辑:所以这个问题最终没有什么关系
@Async
。我发现深度嵌套的代码会从列表中删除项目,导致项目丢失。
java - 创建名为“org.springframework.scheduling.annotation.proxyasyncconfiguration”的bean时出错
我得到以下错误,有人可以告诉我出了什么问题。我无法识别。
描述:
行动:
提前致谢
mysql - Spring Framework @Async 方法 + MySql 性能下降 - 可扩展性问题
我有一个 api,notifyCustomers()
在我的批处理服务器上实现,它从我的应用程序服务器调用。它可以通过短信、推送和电子邮件三种渠道发送通知。我为它们中的每一个都有单独的帮助类,它们都以异步模式执行。
我有大约 30k 用户,我通常会向 3k 到 20k 的特定用户群发送通知。我面临的问题是,每当我调用该 api 时,mysql 的性能都会受到影响,尤其是 CPU。CPU 利用率在 30 分钟左右的很长一段时间内保持在 100% 左右
我已经通过执行以下操作找到了解决方法,这有助于我控制事情:
- 使用投影代替域对象
- 在每次调用中批量获取 500 条数据
- 根据我需要的标准实施索引
- 没有来自 SMS、Email 和 Push 的异步方法的数据库调用
- Thread.sleep(10 mins) 在数据批次的每个后续提取操作之间 <== 这是让我很困扰的肮脏黑客
如果我删除Thread.sleep()
,那么一切都会变得混乱,因为批处理服务器只是调用异步方法,然后启动 db 调用以非常快速地连续获取下一批 500 个用户,直到 db 服务器停止响应。
我需要帮助来解决我应该做的事情,以便在控制事情的同时摆脱第 5 点?我在具有 300 IOPS 和 4 GB RAM (db.t3.medium) 的 RDS 上运行 mysql
java - Spring @Async 不会立即返回
我有一个中等大小的 Spring Boot 应用程序,它使用:Spring Data REST、Spring HATEOAS、Spring JPA、Hibernate。
我在使用@Async 时遇到了一些问题:以这种方式注释的方法不会立即返回给调用者,即使它为执行创建了一个新线程(Spring doc)。
这是我的配置:
这是带有@Async 方法的组件:
这是调用该方法的服务:
这是使用该服务的 REST 控制器:
我启用了 Spring 的日志,我看到在sendEmailPendingOrder()
调用该方法时创建了一个新线程,但是TenantController
仍然未决直到OrderCommunicationBuilder#sendEmailPendingOrder
结束,但它不应该!
一些相关日志:
如您所见,代码OrderCommunicationBuilder
是在新线程中执行的myThreadAsync2
。我不明白为什么在返回之前TenantController
等待。OrderCommunicationBuilder#sendEmailPendingOrder
任何提示将不胜感激。
spring-boot - 无法从 Retrofit 回调返回 CompletableFuture.completedFuture
弹簧靴2.2改装2
我需要创建异步 http 请求。并在返回结果重定向到redirect:/cart
她是我的控制器:
这是我的服务:
这里是我的传输层:
方法onSuccess
(回调方法)成功后调用execute方法addProductToCart
但我在这一行得到编译错误:
错误:
spring-boot - 使用 ContentCachingResponseWrapper 时未获取响应正文
我在 Scala 中有一个带有多个端点的 Springboot API。所有端点都是异步的并返回DeferredResult
。在某些情况下,我想使用过滤器来记录响应正文。我创建了一个顺序为 1 的过滤器来缓存请求和响应,如下所示:
我的日志过滤器类似于以下(删除了特定于域的逻辑):
我必须使用ContentCachingResponseWrapper
,因为我想记录响应正文。但是,即使不尝试记录响应正文并且仅通过引入ContentCachingResponseWrapper
,我也不会收到对任何端点的调用的任何响应。本地运行实例在 curl 上返回如下输出:
如果我删除 ContentCachingFilter,上面的日志过滤器可以正常工作,但是如果我尝试记录响应正文,则响应流被消耗并且不再生成响应。因此我需要使用ContentCachingFilter
.
我确实发现如果端点是同步的,所有这些都有效。有人可以帮我找出问题所在以及如何使其与异步端点一起工作。
java - Spring @Async 传播上下文信息
我有一个 Spring Boot 2.2 应用程序。我创建了这样的服务:
这是我的@Async 配置:
使用SecurityContextHolder.MODE_INHERITABLETHREADLOCAL
我看到安全上下文被传递给 @Async 方法。在我的多租户应用程序中,我使用 ThreadLocal 来设置租户的 ID:
因为 ThreadLocal 与线程相关,所以在 @Async 方法中是不可用的。此外,我的自定义@PlanAuthorization
aop 需要它来执行租户计划的验证。是否有一种干净的方法可以在我的应用程序的任何 @Async 方法中设置 TenantContext?