gpt4 book ai didi

java - 如何使用同步和异步方法正确 cooking DataStax 访问器?

转载 作者:行者123 更新时间:2023-11-30 03:01:49 24 4
gpt4 key购买 nike

当我写accessor时对于实体,我通常添加同一查询的同步和异步版本。例如:

@Accessor
public interface SourceDataAccessor {
@Query("select * from source_data where data_id = ?")
Result<SourceDataCass> get(UUID dataId);

@Query("select * from source_data where data_id = ?")
ListenableFuture<Result<SourceDataCass>> getAsync(UUID dataId);
}

但是当实例化访问器时,日志中会出现这样的警告:

12:32:49,793  WARN com.datastax.driver.core.Cluster:2109 - Re-preparing already prepared query select * from source_data where data_id = ?. Please note that preparing the same query more than once is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once.

也许有一种方法可以同时拥有同一查询的同步和异步版本,但无需重新准备?

最佳答案

这是一个有趣的用例。

目前我们不支持它,因此解决方法是仅使用异步方法编写访问器,然后使用 getAsync().getUninterruptically() 作为同步版本(这就是这是内部完成的)。我同意这不是很用户友好,您可以使用包装类来完成它,但这仍然是一个额外的步骤。

我们可以很容易做的一件事是在处理方法时缓存准备好的语句,这样当在同一接口(interface)中重复查询时至少不会准备两次。

请打开JIRA ticket如果您有兴趣在驱动程序中看到这一点。如果您想自己修复它,也可以创建一个拉取请求(快速查看,唯一更改的方法是 AccessorMapper#prepare )。

关于java - 如何使用同步和异步方法正确 cooking DataStax 访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35768398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com