0

https://quarkus.io/guides/reactive-sql-clients页面中,我们有代码片段来使用事务执行查询更改:

     SqlClientHelper.inTransactionUni(client, tx -> tx
    .preparedQuery("INSERT INTO person (firstname,lastname) VALUES ($1,$2) RETURNING id").execute(Tuple.of(person.getFirstName(), person.getLastName()))
    .onItem().transformToUni(id -> tx.preparedQuery("INSERT INTO addr (person_id,addrline1) VALUES ($1,$2)")
    .execute(Tuple.of(id.iterator().next().getLong("id"), person.getLastName()))).onItem().ignore().andContinueWithNull());

所以这里 SqlClientHelper 将开始事务,如果任何失败,提交和回滚,但是有没有办法找出失败的根本原因并将其打印在日志中?在文档中没有提到我们如何做到这一点。

4

2 回答 2

1

您可以使用 MutinyonFailure获取异常类并对其采取行动。有关更多详细信息,请参阅内容。

于 2021-05-25T18:04:49.487 回答
1

根据接受的答案中给出的链接,这对我有用:

return SqlClientHelper.inTransactionUni(mysqlPool, tx -> {
        return tx.query(query).execute().onItem().transformToUni(
                id -> tx.query("SELECT TRAN_ID FROM " + tableName + " 
ORDER BY TO_DB_TS DESC LIMIT 1").execute())
                .onItem().transform(rows -> 
rows.iterator().next().getString(0)).onFailure().invoke(f -> {
                    LOG.error("Error while inserting data to " + 
tableName + " table::"+f.getMessage());
                });
    }); 
于 2021-05-26T10:27:47.013 回答