无法在 Quarkus 中使用托管执行程序保留实体

Unable to persist entity with managed executor in Quarkus

我无法在 Quarkus 中使用 ManagedExecutor 持久化实体。

managedExecutor.runAsync(() -> {
                    User user = User.findById(userId);
                    if (user == null) {
                        return;
                    }
                    BigDecimal amount;
                    try {
                        amount = new BigDecimal(split[1]);
                    } catch (NumberFormatException e) {
                        throw new BadRequestException("Invalid amount: " + split[1] + ", " + e.getMessage());
                    }
                    managedExecutor.runAsync(threadContext.contextualRunnable(new Runnable() {
                        @Override
                        @Transactional
                        @ActivateRequestContext
                        public void run() {
                            user.minimumAmount = amount;
                            user.persistAndFlush();
                        }
                    }));
                    sendMessage(userId, new NewMinimumAmountMessage(user.minimumAmount));
                });

现在没有抛出异常,执行 persistAndFlush() 后也没有任何异常。 我试图将持久化放在初始的 runAsync 中,但这也不起作用。

这里的代码是一个用@OnMessage注解的websocket函数,把@Transactional放在这里没有任何作用。

ManagedExecutor 和 ThreadContext 都被注入了。

我能够修复它,但我知道这不是正确的方法。

Response response = given()
                            .auth().oauth2(token)
                            .header("Bearer", token)
                            .header("Content-Type", "application/json")
                            .when().put("/api/user/amount/" + split[1])
                            .thenReturn();

我在资源中添加了一个路径,并使用测试函数调用它。