问题标签 [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 - 如何在另一个具有异步方法的类中自动装配具有异步方法的类
我有一个实现 EmailService 的类 EmailServiceImpl 和另一个实现 ReportService 的类 ReportServiceImpl。两个接口都用@EnableAsync注解,所以也有带有@Async注解的方法。
我正在使用默认的弹簧任务执行器。
我无法在 ReportService 中自动装配 EmailService。
spring - 我怎样才能让@Async 在 Spring 中为 2 个不同的方法在 2 个不同的线程上工作。?
在我的应用程序中,我有 2@Async
种方法:一种用于审计目的,另一种用于更新 2 个完全不同的 bean 中的某些映射,从不同的 bean 但同时调用。一个来自审核侦听器,另一个来自控制器。
我的问题是它们都在一个线程中运行,即首先运行审计,然后在同一个线程中创建这些映射。所以,如果审计抛出一些异常,映射不会被创建,或者映射抛出错误,审计不会被记录。
有什么办法,我可以让这两种方法在不同的异步线程中运行。
方法1:
方法2:
为了清楚起见,添加了 println,以了解执行了哪个线程。我对多线程和 Spring 都是新手。
我的配置类有
在使用我的代码添加上述配置后,@Async(value="myExecutor")
我的代码完全停止工作,我的意思是,regenerateZoneMapAsync()
已经定义的 bean 不是从我的调用 bean 调用的,出现了一些代理问题。
编辑:
我想到的一件事是审核线程是否有可能完成其处理并将线程发送回池,然后映射选择同一个线程并开始其处理。
基本上我希望如果审计抛出任何错误,并且回滚地图更新应该仍然发生。
java - 在 Spring MVC 中使用 JUnit 测试异步方法
我有一个需要测试异步方法的场景。我有基于 XML 的配置,如下所示
控制器中的原始异步方法如下
我的测试用例如下所示。
当您运行此测试时,我收到异常,因为异步开始预期为 true 但为 false。
需要如何着手解决这个问题。我错过了什么..?
java - @Async 与 JavaMelody @MonitoredWithSpring 不起作用
我的代码的异步执行有问题。方法startConversion()应该被异步调用。呼叫通过 AOP 代理。
一切分开工作正常。当我将 @Async 和 @MonitoredWithSpring 注释放在一起时会出现问题
javamelody 在第一个 xml 中的 webxml 中定义 - 好的
Spring 异步支持在 xml 中被拒绝 - 好的
没有@MonitoredWithSpring,代码运行良好。 但我需要监控这个bean。
示例代码:
实现类
- 存在 L1 时,代码将同步调用方法 startConversion() 。
- 没有 L1 一切正常,并且方法 startConversion()在新线程中被异步调用
在堆栈跟踪中甚至不创建异步切入点。@Async 注解永远不会被它的 postProcessor 处理。@Transactional 有效,并创建了事务。初始化没有错误
弹簧配置
你能帮助我吗?一些建议?
我没主意了。
java - 使用@Async 方法的JUnit 回滚事务
我正在使用SpringJUnit4ClassRunner
. 我有一个基类:
然后我扩展它并使用 mockMvc 创建一个测试:
在流程结束时,将实体保存到 DB 中。但这里的要求是应该异步完成。所以考虑调用这个方法:
然后HistoryWriter
被称为:
所有这一切的问题是,在测试完成后,History
对象留在数据库中。我需要进行测试事务以最终回滚所有更改。
现在,到目前为止我已经尝试过:
- 删除
@Async
注释。显然,这不是解决方案,而是为了确认没有它的情况下将执行回滚。它的确是。 - 将
@Async
注释移动到HistoryWriter.saveHistory()
方法以将其与@Transactional
. 这篇文章https://dzone.com/articles/spring-async-and-transaction建议它应该以这种方式工作,但对我来说,测试后没有回滚。 - 交换这两个注释的位置。它也没有给出预期的结果。
有谁知道如何强制回滚异步方法中所做的数据库更改?
旁注:
交易配置:
<tx:annotation-driven proxy-target-class="true" transaction- manager="jpaTransactionManager"/>
异步配置:
<task:executor id="executorWithPoolSizeRange" pool-size="50-75" queue-capacity="1000" />
<task:annotation-driven executor="executorWithPoolSizeRange" scheduler="taskScheduler"/>
java - 为 Spring AOP Aspect 提供超时执行
如何为 Spring AOP Aspect 提供超时执行?
MyAspect的记录器方法执行时间不应超过 30 秒,否则我想停止方法执行。我怎么能这样做?
我的方面代码:
我的服务接口:
myServiceImpl :
java - 如何在@Async 中捕获事务异常?
使用 编写事务方法时@Async
,无法捕获@Transactional
异常。喜欢ObjectOptimisticLockingFailureException
,因为它们在例如事务提交期间被抛出方法本身之外。
例子:
我知道我可以捕获一般如下的@Async
异常:
但我更愿意以不同的方式处理给定的异常,只有当它发生在UpdateService
.
问题:我怎样才能在里面抓住它UpdateService
?
是唯一的机会:创建一个附加@Service
的包装UpdateService
和有一个try-catch
块?或者我可以做得更好吗?
spring - 异步保存实体时未持久化的实体
我有以下代码:
控制器:
事件通知器:
事件消费者:
事实证明,该方法saveMessage
从未被调用。我看到它在启动服务器过程中被调用过一次。
我不确定这是与反应堆相关还是与弹簧相关。
编辑:我将保存过程移至服务,没有任何改变
edit2:我记录了服务操作以查看发生了什么:
控制台中的输出是:
没有来自 JPA 的日志,什么都没有!
java - 从 Springs Crud 存储库异步运行方法
我正在使用 spring 制作一个异步存储库。我正在扩展 JpaRepository,而后者又扩展了 CrudRepository。在我自己的方法中,我使用了 Async 注释,以便它们返回 CompletableFuture。我可以让 CrudRepository 中的保存函数返回 CompletableFuture 吗?
java - @Async 与 Spring 3.0.6
我正在尝试使用@Async注释实现异步调用。显然,由于它是一个遗留项目,Spring 版本是 3.0.6,因此它不支持更新的接口(AsyncConfigurer)和更高版本的 Spring 引入的侦听器。
目前,@Async调用在发送电子邮件所需的方法上工作得很好。调用代码调用该方法并返回以恢复正常控制。然后将@Async调用作为单独的线程调用。这一切都非常好,达到了目的。
@Async调用是在一个用于在应用程序中发送电子邮件的方法上。但是,有时可能会触发 1000 封电子邮件。我认为这会引发 1000 个左右的线程。这不会导致有这么多活动线程的应用程序出现问题吗?这些线程会自行终止吗?JVM 在内存使用和堆空间方面会发生什么?
此外,我试图通过将该方法标记为@Async从另一个方法调用此方法,但看起来线程没有创建,并且控件实际上在那里等待以完成该方法中的所有操作。为什么它有不同的行为?不知道为什么会这样。
提前致谢!