我们目前正在为Spanner检索DatabaseClient,如下所示:

DatabaseClient dbClient = spanner.getDatabaseClient(...)


在多个线程中使用此DatabaseClient对象是否安全?具体来说,我们想依赖注入一个DatabaseClient实例,并想了解它是否是线程安全的并且可以重用,或者每个线程是否应该调用spanner?

这是在Web API服务中使用的,因此对URL的大量传入请求,每个传入请求都需要一个扳手连接。最好的分享对象是什么?例如,我们不希望每个会话都必须加载Google JSON凭据(我们假设这发生在SpannerOptions Builder中)。

最佳答案

是的,它应该是线程安全的。

DatabaseClient是使用SessionPool类的implemented。有关线程安全的说明,请参见SessionPool implementation

08-05 09:16