问题标签 [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 - @Async with CompletableFuture#get not throws custom RuntimeException
我有这个方法:
并且GeneralException
是这样定义的:
问题是,什么时候GeneralException
抛出,当我调用CompletableFuture#get()
来获取我的数据或异常时,我有 ajava.util.concurrent.ExecutionException
而不是我的 custom GeneralException
。Spring doc 声称:
当
@Async
方法具有Future
-typed 返回值时,很容易管理在方法执行期间引发的异常,因为在调用结果时会引发此get
异常Future
。
我究竟做错了什么?非常感谢
编辑: 这是客户端代码:
还有一个例外:
为什么我还有java.util.concurrent.ExecutionException
?
spring - AsyncUncaughtExceptionHandler 实现中的自动装配问题
我有一个这样的配置类:
以及这里的 ExceptionHandler:
问题是,在未捕获的异常上(在用 注释的方法中) ,即使返回正确的 bean @Async
,它也不会通过方法。handleUncaughtException
getAsyncUncaughtExceptionHandler()
任何想法?
更新
我发现删除我的类 AsyncExceptionHandler 中的自动装配(这不是我想要的),然后它进入handleUncaughtException
未捕获异常的方法。
这是为什么?
java - Spring Async Executor:x时间后从队列中删除
我在Executor
这里定义了一个:
我希望能够删除在队列中停留超过 X 分钟的任务(未处理 X 分钟)
有没有一种简单的方法可以做到这一点?我找不到任何东西。
java - 如何在可运行文件中进行休息 api 调用?
我有几个阅读器,我不断地阅读 rfid 标签。我想用数据库中的内容检查这些标签。我有一个 spring 应用程序,它使用 runnables 连接并从读者那里获取信息。我正在将标签添加到队列中。我有一个单独运行的rest api,该应用程序将使用它。我想在阅读器应用程序运行时使用这个 api 来多次检查数据库以及向数据库添加信息。我该怎么做呢?
我尝试了多种方法,例如使用 completablefuture,尝试使用 webflux,使用 resttemplate 进行 api 调用,webclient 进行 api 调用,但似乎没有任何效果。我有一个执行器服务,它从主要调用读者。每个阅读器都是用一个可运行文件创建的。runnable 创建 Reader 并调用该函数。在该函数中,启动了 2 个可运行任务。在其中一项任务中,我想调用其余 api。我将尝试包含所有必要的代码。
这是从 main 调用的类:
我在服务文件中有这个:
然后我尝试在我的主要原型组件中调用它:
我希望该应用程序继续接收来自读者的信息,并在收到标签时将标签添加到队列中,然后检查是否在数据库中,如果是,我希望将位置添加到数据库中。虽然发生这种情况,但我仍然希望该应用程序继续接收来自读者的信息。
hibernate - 为什么我在使用 @Async 时无法获得一个开放的 JPA 会话来执行迁移工作?
我有一个以纯文本形式存储第 3 方密码的数据库表。我现在正在更新表以存储加密的密码。为了处理这个问题,我有一个@EntityListener
类来执行加密和解密后加载和预持久/更新。现在,我正在尝试编写代码来加密当前在数据库中的所有密码。
我编写了迁移函数来加载尚未迁移的所有内容并再次保存(以便实体侦听器可以运行)。实体侦听器实际上不会被调用,除非 Hibernate 认为对象是脏的,所以我决定从当前会话中驱逐实体,认为这将是运行转换的最简单方法。这是我所拥有的:
(未显示:调用 Migrator 的简单 Web 控制器)
我添加了@Transactional
注释,attemptEncryption()
以便保存迁移的每条记录。我不希望随机行的失败导致整个操作回滚;成功保存某些内容后,我希望提交该事务。
由于这需要一段时间才能运行,我想发回 HTTP 响应并migrateAll()
在单独的线程中运行。它在没有多线程的情况下工作得很好,但是一旦我添加了@Async
注释,我就遇到了org.hibernate.SessionException: Session is closed!
异常(stacktrace 显示在尝试驱逐实体时抛出了异常attemptEncryption()
)。我认为将工作转移到另一个线程是原因,但我已经@Async
在我的应用程序的其他部分使用过,没有任何问题。这段代码和我的其他异步代码之间的唯一主要区别是我正在从会话中驱逐实体;我不会在其他任何地方这样做。此外,数据库可以很好地加载实体myRepo.getUnencrypted()
。如果我在 Hibernate 上做错了什么,我觉得这应该会失败。
问题
- 当我去驱逐实体时,为什么我的会话关闭了?
- 有没有更好的方法让我的实体变脏,以便 Hibernate 运行 pre-persist 侦听器并刷新到数据库?
研究
- (以分离方式加载对象)使用 Spring Data JPA 和 JPA EntityListener 进行字段级加密- 我尝试添加
@Transactional(propagation = Propagation.NOT_SUPPORTED)
到getUnencrypted()
方法,但没有任何改变。 - (@Async 方法中的会话)https://stackoverflow.com/a/29271930/2047962 - 我已经
@Transactional
按照规定使用了注释。 - (强制更新“干净”实体)https://stackoverflow.com/a/37255257/2047962 - 无法使用 Persistable。我不希望这个实体总是看起来很脏,我只希望它对这个方法来说很脏。
- 在 Hibernate 中强制更新- 在
attemptEncryption()
spring - @Async 和 @Transaction 方面顺序
使用 Spring Boot 2.1.1.RELEASE / Spring Framework 5.1.4,我有一个应用程序通过以下方式启用@Async
了@Transactional
注释:
运行同时使用两者注释的方法时,首先创建事务,然后开始异步执行。因此,实际的方法体不会在事务内部执行。
我如何配置spring /方面以有意义的顺序实际执行,例如在新线程上启动事务?
附带说明一下,对于较旧的 Spring Boot 1.5.17 / Spring Framework 4.3.20,它确实有效。
java - 获取@RestControllerAdvice 中带注释的@Async 方法中引发的异常
这里有一个非常相似的问题,但答案不足以解决我的问题。
我在一个@Service
类中有这个方法:
控制器:
控制器建议:
我们到了。由于异常将在另一个线程中引发,我该如何继续使其可用于@RestControllerAdvice
?
许多人建议实施AsyncUncaughtExceptionHandler,我同意,但这并不能回答问题。
当我删除@Async
时,一切都很好,我可以看到同一个线程执行所有任务,但@Async
我有 2 个线程参与。
一种解决方案是让父线程抛出异常(但这太麻烦了,我不知道如何实现)。
谢谢你的帮助。
java - Spring Flux 和 Async 注解
我有一个 Spring Flux 应用程序,有时我需要在后台执行一些繁重的任务,调用者(HTTP 请求)不需要等到该任务完成。
如果没有反应器,我可能只会使用Async注释,在不同的线程上执行该方法。使用 reactor,我不确定是否应该继续使用这种方法,或者是否已经有一个内置机制可以让我完成此操作。
例如,给定一个接受Resource对象的Controller :
还有一个处理器类:
的 HTTP 调用者/create
不需要等到run
方法完成。
spring-boot - 如何从 @Async 带注释的方法中抛出异常
我有两个模块,一个从休息模板调用另一个。(管理员调用 notifServer)notifServer 有一个用 注释的方法@Async
。我想在该方法中抛出异常,但是管理员太快得到响应,并且无法在管理员处捕获异常方法。
我是 spring 和 @Async 流程的新手。我尝试将响应正文从 NotifServer 映射到 C CompletableFuture.class
。但我仍然没有收到错误响应。
此代码来自管理员
现在这是来自NotifServer
这是用@Async 注释的。
那么有没有办法让我在管理员的响应正文中捕获客户端异常?
编辑 这是来自 notifServer 的 API
然后 sendFcmByAdmin 有 @Async 注释。
java - java中泛型类型的类型引用
我正在尝试实现 Spring Async,但在尝试将类引用传递给 CompletableFuture 时遇到问题。
现在我想创建一个常量并通过类型擦除传递类引用。
请建议,如何在确保类型安全的同时通过类引用。