在 Quarkus 中提交当前事务后执行一些异步操作

do some asynchronous action after current transaction commited in Quarkus

假设我有一个 rest 调用,它在数据库中创建了一些对象“A”。方法用@Transactional 注释标记。在创建之后,我需要在另一个线程中或通过某些消息传递系统或以其他异步方式启动另一个异步进程。该新进程依赖于对象“A”并需要查看它。

如何确保在新进程开始执行之前提交事务?

例如在Spring中有

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization(){
           void afterCommit(){
                //do what you want to do after commit
           }
})

Quarkus 有类似的东西吗?

您可以注入 TransactionManager

@Inject
TransactionManager transactionManager;

并做

Transaction transaction = transactionManager.getTransaction();
transaction.registerSynchronization(new Synchronization() {
                @Override
                public void beforeCompletion() {
                    //nothing here
                }

                @Override
                public void afterCompletion(int status) {
                    //do some code after completion
                }
            });