问题标签 [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.
spring-boot - Spring Boot 和长时间运行的任务
在我的 Spring Boot 应用程序中,我必须实现一个导入服务。用户可以提交一堆 JSON 文件,应用程序会尝试从这些文件中导入数据。根据 JSON 文件的数据量,单个导入过程可能需要 1 或 2 小时。
我不想在导入过程中阻止用户,因此我计划接受导入任务并通知用户此数据已安排处理。我会将数据放入队列,另一端的空闲队列消费者将开始导入过程。此外,我需要有可能监视队列中的作业,如果需要,可以终止它们。
现在我正在考虑使用 EmbeddedApache ActiveMQ
来引入消息生产者和消费者逻辑,但在此之前我想问一下 - 从架构的角度来看 - 它是描述任务的好选择还是可以用一个更合适的工具..比如普通的Spring@Async
等等?
spring - 如果定义了多个任务执行器/调度器,Spring @Async 如何选择任务执行器/调度器?
我在 XML 配置中定义了以下内容:
在 Spring 中使用@Async
注解时,它如何知道使用这些执行器/调度器中的哪一个?我希望它在启动时会引发错误,因为这里有多个并且我没有包含<task:annotation-driven executor="xxx"/>
标签,但它似乎工作正常。有没有一种方法可以记录正在使用的某个地方?
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 完成的记录是谁和在哪里保存的。
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:
spring - spring async 不释放数据库连接
技术堆栈
我正在使用 spring boot 1.3.5 作为休息服务,它在内部从数据库中获取数据。使用的 ORM 是 JOOQ,连接池管理由 BoneCP 完成......
要求
我有一个要求,我需要触发多个 sql 来获取数据,组合结果并将它们全部返回......
ISSUE
我已经使用 spring async 实现了这一点,但是遇到了 spring sync 方法阻止数据库连接并且没有将它们释放到数据库池的问题。在几次点击后达到最大连接并且应用程序停止响应......
尝试
一旦我从我的方法中删除 @Async 注释它就可以正常工作..
请提出一个可能的解决方案来解决这个问题,我需要触发多个查询并组合结果。如果bonecp中有任何设置在超时后将连接释放回池,那么如果有人帮助我,这也是另一种解决方案。
java - Spring AsyncResttemplate HTTPs (SSL) 服务调用
我正在使用 Spring asyncresttempate 同时调用多个服务。这些服务通过 SSL 公开。你能告诉我如何使用 SSL 证书和 AsyncResttemplate 来异步调用服务吗?我们可以将 RestTemplate 与 HttpConnectionFactory 一起使用,如何为 AsyncRestTemplate 做同样的事情。
我正在使用 Spring 4.3,JDK 8。
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 模式还有其他好处吗?
java - Spring @Async 不起作用
我正在使用 Spring 3.2.2.RELEASE 版本。@Async 注释没有按预期工作。
应用程序上下文.xml
导入.java
进程.java
After Sleep日志应最后打印,但在继续之前打印
java - @Retryable 不适用于 @EventListener Spring
我在类中有一个方法,它也是一个组件。该方法具有以下注释:
出于某种原因,未触发重试。
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。