问题标签 [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.

0 投票
1 回答
1195 浏览

spring-boot - Spring Boot 和长时间运行的任务

在我的 Spring Boot 应用程序中,我必须实现一个导入服务。用户可以提交一堆 JSON 文件,应用程序会尝试从这些文件中导入数据。根据 JSON 文件的数据量,单个导入过程可能需要 1 或 2 小时。

我不想在导入过程中阻止用户,因此我计划接受导入任务并通知用户此数据已安排处理。我会将数据放入队列,另一端的空闲队列消费者将开始导入过程。此外,我需要有可能监视队列中的作业,如果需要,可以终止它们。

现在我正在考虑使用 EmbeddedApache ActiveMQ来引入消息生产者和消费者逻辑,但在此之前我想问一下 - 从架构的角度来看 - 它是描述任务的好选择还是可以用一个更合适的工具..比如普通的Spring@Async等等?

0 投票
1 回答
589 浏览

spring - 如果定义了多个任务执行器/调度器,Spring @Async 如何选择任务执行器/调度器?

我在 XML 配置中定义了以下内容:

在 Spring 中使用@Async注解时,它如何知道使用这些执行器/调度器中的哪一个?我希望它在启动时会引发错误,因为这里有多个并且我没有包含<task:annotation-driven executor="xxx"/>标签,但它似乎工作正常。有没有一种方法可以记录正在使用的某个地方?

0 投票
1 回答
1543 浏览

java - spring @Async 的线程管理/工作

@Async在我的代码中使用从 Rest 控制器到 3 个不同方法的 3 个并行调用。

根据我对servlet的理解(这可能是错误的),当spring@RestController方法接收到请求时,会为其创建一个线程,此后对于每个新请求都会创建一个新线程。

请求线程 1 - 创建了 3 个异步线程
请求线程 2 - 创建了 3 个异步线程

现在 spring/Request 线程如何知道哪 3 个异步线程属于哪个线程,即请求线程 1 或请求线程 2。

可能有某种映射告诉他们。
我尝试@Async在线搜索,但很少有关于其工作的文档。谷歌充斥着如何使用代码但无法正常运行。

@Async底线 - 有人可以解释一下代码的工作/线程管理吗


更新图像以获得更好的解释:

在此处输入图像描述

1) 请求 1 进来并产生 3 个线程(A1、A2 和 A3),因为它是一个带有响应 R1、R2 和 R3 的异步调用。
2)请求2进来并做同样的事情,即请求:A4,A5和A6,响应为R1,R2和R3 ..
3)现在我的问题是R1,R2和R3如何意识到它们是相同的请求,即请求 1。如果它是一个顺序调用,那么同一个线程将从开始传播到结束。但是在创建 6 个异步请求之后,我只能在线程转储中看到 6 个线程,并且没有线程作为请求 1 或请求 2。
那么在 R1、R2 和 R3 完成时,请求 1 如何完成,但在 R1 完成时没有, R2 和 R6请求 1 从 R1 、 R2 和 R3 完成的记录是谁和在哪里保存的。

0 投票
1 回答
156 浏览

spring-scheduled - Spring @Async not working on an anonymous class

I am using @Async tag inside a method in Anonymous class. Does Spring AOP support this:

0 投票
1 回答
1195 浏览

spring - spring async 不释放数据库连接

技术堆栈
我正在使用 spring boot 1.3.5 作为休息服务,它在内部从数据库中获取数据。使用的 ORM 是 JOOQ,连接池管理由 BoneCP 完成......

要求
我有一个要求,我需要触发多个 sql 来获取数据,组合结果并将它们全部返回......

ISSUE
我已经使用 spring async 实现了这一点,但是遇到了 spring sync 方法阻止数据库连接并且没有将它们释放到数据库池的问题。在几次点击后达到最大连接并且应用程序停止响应......

尝试
一旦我从我的方法中删除 @Async 注释它就可以正常工作..

请提出一个可能的解决方案来解决这个问题,我需要触发多个查询并组合结果。如果bonecp中有任何设置在超时后将连接释放回池,那么如果有人帮助我,这也是另一种解决方案。

0 投票
1 回答
829 浏览

java - Spring AsyncResttemplate HTTPs (SSL) 服务调用

我正在使用 Spring asyncresttempate 同时调用多个服务。这些服务通过 SSL 公开。你能告诉我如何使用 SSL 证书和 AsyncResttemplate 来异步调用服务吗?我们可以将 RestTemplate 与 HttpConnectionFactory 一起使用,如何为 AsyncRestTemplate 做同样的事情。

我正在使用 Spring 4.3,JDK 8。

0 投票
1 回答
2117 浏览

java - Spring Boot ASync + AutoWired Executor 与手动 Executor + Future/Callable?

创建和管理自己ExecutorService的方法与在@Bean方法上使用 Spring Boot 的 @Async 和创建Executor.

对我来说,手动操作似乎要简单得多。我只是创建了 myExecutorService和一个使用它来安排任务的方法/ Callable

我需要 Spring Boot:

  • 装饰方法@Async
  • @Configuration用,装饰我的配置类@EnableAsync
  • 添加一个@Bean以创建一个Executor

手动操作是否存在潜在问题?Spring可能会杀死线程吗?使用 Spring Async 模式还有其他好处吗?

0 投票
1 回答
936 浏览

java - Spring @Async 不起作用

我正在使用 Spring 3.2.2.RELEASE 版本。@Async 注释没有按预期工作。

应用程序上下文.xml

导入.java

进程.java

After Sleep日志应最后打印,但在继续之前打印

0 投票
0 回答
1098 浏览

java - @Retryable 不适用于 @EventListener Spring

我在类中有一个方法,它也是一个组件。该方法具有以下注释:

出于某种原因,未触发重试。

0 投票
1 回答
3210 浏览

java - 测试 Spring 的 @Async void-returning 方法

@Async在我的 Spring 应用程序中返回void(或者Unit,我正在用 Kotlin 编写)的方法有一点问题。

我不知道为什么,但是当@Async方法返回时void它只是不执行,或者至少它没有做它应该做的事情。需要说,在我的异步方法中,我想使用 发送电子邮件JavaMailSender,所以没什么大不了的。这是方法:

但是从来没有收到一封电子邮件,没有记录异常(我正在运行 testNG 测试)。

当我更改函数的签名以使其返回Future<String>并在函数末尾添加一些虚拟返回行然后调用service.sendEmail(...).get()时,方法的主体会神奇地执行并且电子邮件到达。

在我的@Configuration班上,有@EnableAsync. 我还实现AsyncConfigurer并提供了自己的执行程序和异常处理程序,因为我认为这可能与我的执行程序 bean 定义有关,但没有任何帮助。

这让我发疯,因为我只想在后台默默地执行一些东西,但它不起作用。默默地我的意思是我不想被里面抛出的异常所困扰。

你有什么想法?

更新: 所以正如@pleft 建议的那样,我在我的方法中放了一些打印。现在,当我运行时mvn clean test,我可以看到打印了 1,2,3,不是每次都打印。有时只打印 1 和 2。我也把 print 放在我的 中AsyncUncaughtExceptionHandler,但那个没有被调用。看起来后台线程被杀死得太早了。

更新 2:

我的服务配置:

也许它很重要,也许不重要,但我在那个processTemplate方法中使用了 Thymeleaf。