问题标签 [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 投票
0 回答
1768 浏览

spring-boot - 使用 @Async 方法创建 bean 时出现代理错误

我已经编辑了这个,因为我意识到我误诊了错误的原因。该错误是因为我在由 bean 实例化的抽象类中有一个异步方法。我已将此方法添加到下面的抽象类中。如果我注释掉 @Async 注释,代码将构建并“运行”。这给了我现在可以查看的地方,但我会留下这个问题,以防有人可以帮助并让我更快地启动和运行!

我正在尝试重构使用 xml 配置以使用 SpringBoot 和代码配置的 java/spring 应用程序。对我来说,这是一条非常古老的学习曲线。

我遇到了一个错误,我认为该错误记录得很好,但我无法理解文档。本质上,一个 bean 被创建,然后在另一个 bean 的构造函数中使用。将其移至代码配置时出现的错误是...

从一些谷歌搜索来看,我认为这与将一个 bean 传递到另一个 bean 的机制有关,因此这个 bean 成为代理 bean。

所以xml配置是这样的......

这很好用(Spring 4 MVC java 8(从 7 升级,代码转换最少)。

到目前为止的代码配置看起来像这样

AsyncAccountReader 没有引起任何问题当我包含基于抽象类的类的编写器时出现错误(上图),因此沿着这些线

界面

抽象类

具体类

因此,如果我包含太多或削减太多以试图指出相关内容,请道歉。

关键是我认为如果我删除 @Async 注释,代码会构建并运行,否则我会收到上面的错误。谁能告诉我为什么这是一个问题,并指出我实施解决方案的写作方向?

0 投票
2 回答
1547 浏览

java - 哪个 TaskExecutor 用于异步日志记录?

我有一个REST网络服务,想记录任何传入和传出的XML请求。由于它们可能非常大,而且我还必须应用某种转换,我想在异步线程中执行它。

到目前为止,我只是@Async在记录器方法上使用注释。这将使用默认值SimpleAsyncTaskExecutor,即“不重用任何线程”: https ://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#scheduling-task-executor-types

问题:我应该更好地定义自己的ThreadPoolTaskExecutor而不是依赖默认的简单执行器吗?为短期的日志记录任务设置一个“重用线程”执行器是否明智?

进一步考虑:我还将进行一些异步数据库行更新,这些更新也应该使用执行@Async,并且可能使用相同的执行程序。

我的主要问题是:我不想考虑线程池的固定大小、容量、油门限制等。我只想告诉我的例程:“在异步线程中执行以下逻辑。” 只需在上面堆放任何东西。

我必须使用哪个TaskExecutors,应该应用哪个配置?

例如,以下执行人适合吗?

0 投票
5 回答
7614 浏览

java - Spring @Cacheable 和 @Async 注解

我需要缓存一些异步计算的结果。具体来说,为了克服这个问题,我正在尝试使用 Spring 4.3 缓存和异步计算功能。

作为一个例子,让我们看下面的代码:

可能吗?我的意思是,Spring 的缓存抽象会正确处理 type 的对象CompletableFuture<User>吗?我知道Caffeine Cache有类似的东西,但如果配置正确,我不明白 Spring 是否使用它。

编辑:我对User对象本身不感兴趣,但对CompletableFuture代表计算的对象不感兴趣。

0 投票
1 回答
456 浏览

spring - Spring Boot中如何以AOP方式实现请求超时管理

目前我正在探索实现“在 Spring Boot 中以 AOP 方式进行请求超时管理”的方法,但有几个限制。要求/限制如下:

  • 本来的目的是如果一个api请求的处理时间超过5秒,那么直接返回超时结果,而不是继续处理
  • 要监控的rest api由标准的spring mvc rest控制器实现。里面的所有api都返回这样的json字符串:

    /li>
  • 超时逻辑需要AOP实现
  • (真正的意思部分) 不应该对控制器进行任何更改,这意味着:不应该更改请求生成方法;返回类型不应更改(不允许'Callable<...>')

我已经找到了 1 个答案(异步方法),它可以通过 spring async 完美地解决问题本身,并且超时返回结果非常漂亮,但是它改变了返回类型,并且还触及了控制器中的代码。我还找到了一种使用 AOP 的解决方案(AOP 方法),但场景与我的完全不同。它已经将一些业务逻辑移动到 AOP 类中,但不允许我接触控制器代码。如果有人能提供解决方案,我将不胜感激。不能满足所有限制但最小化差异的解决方案也被接受。

0 投票
1 回答
1844 浏览

java - spring 上下文中的多个 AsyncAnnotationBeanPostProcessor

我有一个春季项目。

当我在 tomcat 上运行项目时,出现以下错误 -

现在我知道原因是我在 applicationContext.xml 中有以下内容 -

我有@EnableAsync配置类(WebMvcConfigurerAdapter)。

我知道这两个是冲突的。但是如果我 remove <task:annotation-driven />,那么我的@Scheduled 方法不会被调用,如果我 remove @EnableAsync,那么我的@Async方法不再是异步的。

我应该怎么做才能使两者都起作用?

在 tomcat 上运行项目时出现以下错误 -

0 投票
1 回答
3953 浏览

spring-boot - @Scheduled 和 @Async 在 spring-boot 中共享相同的线程池

我已经配置了两个不同的线程池,一个@Scheduled用于@Async. 但是,我注意到@Async没有使用线程池。

这是调度程序配置

这是异步的配置

这是我调用它们的方式

这是日志

如您所见,两个日志都具有相同的调度程序池。但我希望看到第二个来自异步

0 投票
1 回答
1474 浏览

java - 同步计划方法运行异步方法 - Spring @Scheduled, @Async

我正在使用 Spring 的 @Scheduled 和 @Async 注释。

我的目的

调度一个同步方法——它运行一个 for 循环,这个循环将运行一个异步方法,所以循环中的下一个值不需要等到方法完成。

请参阅下面的代码:

问题:

我的异步方法不在不同的任务上运行。它仅在我将 @Async 注释也放在我的计划方法上时才有效。但是然后我的预定方法将运行 asyncronuos ,这不是我想要的。调度的方法需要同步运行,而for循环中被调用的方法需要异步运行。

尝试

我尝试了这样的解决方法:

@Scheduled 方法中的 Spring @Async 方法调用

-> 将我的异步方法放在另一个类中。像这样:

现在的问题是我的计划任务被执行了两次......

更新

我做了更多的日志记录,我的对象只被创建一次:

我的 fixedRate 是 3000 -> 3 seconds 有人要求“将其增加到 30 sec 以查看流程”,但它仍然执行两次:因此在 3 或 30 秒或任何固定速率设置后,它将执行两次而不是一次..

-> 两次执行之间的时间只是一些非常低的毫秒..我只是不明白..

有什么想法吗 ?

0 投票
0 回答
432 浏览

spring-mvc - Spring异步和可完成的未来无法获得结果

Spring 4.3 和 Java 8 都配置了 spring

调用服务 cclass:

异步正在成功执行,并且也在异步线程中运行,并且所有 id 都已完成。但是该语句join(); 在加入后挂起并且所有异步任务都被创建后没有出现,我试图捕获一个通用异常并且没有返回任何内容

0 投票
1 回答
83 浏览

spring - 销毁@bean 创建的执行器

我在 Spring 4 中有以下 annotationconfig

我关心的是Executor. Spring会认识到动态类型Executor是的一个实例DisposableBean并销毁它,还是我需要将返回类型更改ThreadPoolTaskExecutor为它才能工作?

0 投票
1 回答
1259 浏览

java - 从存储库返回实体时如何使用 CompletableFuture.thenCompose()?

我开始CompletableFuture在 Spring Boot 中使用,我在某些地方看到通常的存储库方法返回CompletableFuture <Entity>而不是Entity.

我不知道发生了什么,但是当我返回CompletableFuture存储库中的实例时,代码运行完美。但是,当我返回实体时,代码不会异步工作并且总是返回null.

这是一个例子:

前面的代码运行完美,但下面的代码不会异步运行,结果总是null.

为什么第二个代码不起作用?