问题标签 [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 - 使用 @Async 方法创建 bean 时出现代理错误
我已经编辑了这个,因为我意识到我误诊了错误的原因。该错误是因为我在由 bean 实例化的抽象类中有一个异步方法。我已将此方法添加到下面的抽象类中。如果我注释掉 @Async 注释,代码将构建并“运行”。这给了我现在可以查看的地方,但我会留下这个问题,以防有人可以帮助并让我更快地启动和运行!
我正在尝试重构使用 xml 配置以使用 SpringBoot 和代码配置的 java/spring 应用程序。对我来说,这是一条非常古老的学习曲线。
我遇到了一个错误,我认为该错误记录得很好,但我无法理解文档。本质上,一个 bean 被创建,然后在另一个 bean 的构造函数中使用。将其移至代码配置时出现的错误是...
从一些谷歌搜索来看,我认为这与将一个 bean 传递到另一个 bean 的机制有关,因此这个 bean 成为代理 bean。
所以xml配置是这样的......
这很好用(Spring 4 MVC java 8(从 7 升级,代码转换最少)。
到目前为止的代码配置看起来像这样
AsyncAccountReader 没有引起任何问题当我包含基于抽象类的类的编写器时出现错误(上图),因此沿着这些线
界面
抽象类
具体类
因此,如果我包含太多或削减太多以试图指出相关内容,请道歉。
关键是我认为如果我删除 @Async 注释,代码会构建并运行,否则我会收到上面的错误。谁能告诉我为什么这是一个问题,并指出我实施解决方案的写作方向?
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
,应该应用哪个配置?
例如,以下执行人适合吗?
java - Spring @Cacheable 和 @Async 注解
我需要缓存一些异步计算的结果。具体来说,为了克服这个问题,我正在尝试使用 Spring 4.3 缓存和异步计算功能。
作为一个例子,让我们看下面的代码:
可能吗?我的意思是,Spring 的缓存抽象会正确处理 type 的对象CompletableFuture<User>
吗?我知道Caffeine Cache有类似的东西,但如果配置正确,我不明白 Spring 是否使用它。
编辑:我对User
对象本身不感兴趣,但对CompletableFuture
代表计算的对象不感兴趣。
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 类中,但不允许我接触控制器代码。如果有人能提供解决方案,我将不胜感激。不能满足所有限制但最小化差异的解决方案也被接受。
java - spring 上下文中的多个 AsyncAnnotationBeanPostProcessor
我有一个春季项目。
当我在 tomcat 上运行项目时,出现以下错误 -
现在我知道原因是我在 applicationContext.xml 中有以下内容 -
我有@EnableAsync
配置类(WebMvcConfigurerAdapter)。
我知道这两个是冲突的。但是如果我 remove <task:annotation-driven />
,那么我的@Scheduled
方法不会被调用,如果我 remove @EnableAsync
,那么我的@Async
方法不再是异步的。
我应该怎么做才能使两者都起作用?
在 tomcat 上运行项目时出现以下错误 -
spring-boot - @Scheduled 和 @Async 在 spring-boot 中共享相同的线程池
我已经配置了两个不同的线程池,一个@Scheduled
用于@Async
. 但是,我注意到@Async
没有使用线程池。
这是调度程序配置
这是异步的配置
这是我调用它们的方式
这是日志
如您所见,两个日志都具有相同的调度程序池。但我希望看到第二个来自异步
java - 同步计划方法运行异步方法 - Spring @Scheduled, @Async
我正在使用 Spring 的 @Scheduled 和 @Async 注释。
我的目的
调度一个同步方法——它运行一个 for 循环,这个循环将运行一个异步方法,所以循环中的下一个值不需要等到方法完成。
请参阅下面的代码:
问题:
我的异步方法不在不同的任务上运行。它仅在我将 @Async 注释也放在我的计划方法上时才有效。但是然后我的预定方法将运行 asyncronuos ,这不是我想要的。调度的方法需要同步运行,而for循环中被调用的方法需要异步运行。
尝试
我尝试了这样的解决方法:
@Scheduled 方法中的 Spring @Async 方法调用
-> 将我的异步方法放在另一个类中。像这样:
现在的问题是我的计划任务被执行了两次......
更新
我做了更多的日志记录,我的对象只被创建一次:
我的 fixedRate 是 3000 -> 3 seconds 有人要求“将其增加到 30 sec 以查看流程”,但它仍然执行两次:因此在 3 或 30 秒或任何固定速率设置后,它将执行两次而不是一次..
-> 两次执行之间的时间只是一些非常低的毫秒..我只是不明白..
有什么想法吗 ?
spring-mvc - Spring异步和可完成的未来无法获得结果
Spring 4.3 和 Java 8 都配置了 spring
调用服务 cclass:
异步正在成功执行,并且也在异步线程中运行,并且所有 id 都已完成。但是该语句join();
在加入后挂起并且所有异步任务都被创建后没有出现,我试图捕获一个通用异常并且没有返回任何内容
spring - 销毁@bean 创建的执行器
我在 Spring 4 中有以下 annotationconfig
我关心的是Executor
. Spring会认识到动态类型Executor
是的一个实例DisposableBean
并销毁它,还是我需要将返回类型更改ThreadPoolTaskExecutor
为它才能工作?
java - 从存储库返回实体时如何使用 CompletableFuture.thenCompose()?
我开始CompletableFuture
在 Spring Boot 中使用,我在某些地方看到通常的存储库方法返回CompletableFuture <Entity>
而不是Entity
.
我不知道发生了什么,但是当我返回CompletableFuture
存储库中的实例时,代码运行完美。但是,当我返回实体时,代码不会异步工作并且总是返回null
.
这是一个例子:
前面的代码运行完美,但下面的代码不会异步运行,结果总是null
.
为什么第二个代码不起作用?