如何在 quarkus 中处理反应式我的 sql 客户端的失败
How to handle failure in reactive my sql client in quarkus
在 https://quarkus.io/guides/reactive-sql-clients 页面中,我们有使用事务执行查询更改的代码片段:
SqlClientHelper.inTransactionUni(client, tx -> tx
.preparedQuery("INSERT INTO person (firstname,lastname) VALUES (,) RETURNING id").execute(Tuple.of(person.getFirstName(), person.getLastName()))
.onItem().transformToUni(id -> tx.preparedQuery("INSERT INTO addr (person_id,addrline1) VALUES (,)")
.execute(Tuple.of(id.iterator().next().getLong("id"), person.getLastName()))).onItem().ignore().andContinueWithNull());
所以这里 SqlClientHelper 将开始事务,如果有任何失败则提交和回滚但是有什么方法可以找出失败的根本原因并将其打印在日志中吗?
在文档中没有提到我们如何做到这一点。
您可以使用 Mutiny 的 onFailure
获取异常 class 并对其进行操作。有关详细信息,请参阅 this。
基于已接受答案中给出的 link 这对我有用:
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());
});
});
在 https://quarkus.io/guides/reactive-sql-clients 页面中,我们有使用事务执行查询更改的代码片段:
SqlClientHelper.inTransactionUni(client, tx -> tx
.preparedQuery("INSERT INTO person (firstname,lastname) VALUES (,) RETURNING id").execute(Tuple.of(person.getFirstName(), person.getLastName()))
.onItem().transformToUni(id -> tx.preparedQuery("INSERT INTO addr (person_id,addrline1) VALUES (,)")
.execute(Tuple.of(id.iterator().next().getLong("id"), person.getLastName()))).onItem().ignore().andContinueWithNull());
所以这里 SqlClientHelper 将开始事务,如果有任何失败则提交和回滚但是有什么方法可以找出失败的根本原因并将其打印在日志中吗? 在文档中没有提到我们如何做到这一点。
您可以使用 Mutiny 的 onFailure
获取异常 class 并对其进行操作。有关详细信息,请参阅 this。
基于已接受答案中给出的 link 这对我有用:
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());
});
});