我正在使用 Java 的 Spanner 客户端库,并使用 Spring 配置客户端。过了一会儿,应用程序开始记录以下消息,但我不明白为什么。应用程序的并发性是最小的。似乎会话没有重用。有什么建议 ?RESOURCE_EXHAUSTED:池中没有可用的会话。可以通过调用 SessionPoolOptions#Builder#setMaxSessions 来覆盖池中的最大会话数。通过设置 SessionPoolOptions#Builder#setBlockIfPoolExhausted,可以使客户端阻塞而不是失败。@Configurationpublic class SpannerConfig { @Value("${datasource.instanceId}") private String instance; @Value("${datasource.databaseId}") private String database; @Bean public Spanner spannerService() throws IOException { SessionPoolOptions sessionPoolOptions = SessionPoolOptions.newBuilder() .setFailIfPoolExhausted() .setMinSessions(5) .setMaxSessions(100) .build(); SpannerOptions options = SpannerOptions.newBuilder() .setSessionPoolOption(sessionPoolOptions) .build(); return options.getService(); } @Bean public DatabaseClient spannerClient(Spanner spannerService) { DatabaseId databaseId = DatabaseId.of(spannerService.getOptions().getProjectId(), instance, database); return spannerService.getDatabaseClient(databaseId); }}
2 回答
浮云间
TA贡献1829条经验 获得超4个赞
听起来您有会话泄漏。确保您在任何 DatabaseClient.singleUse* 或 DatabaseClient.ReadOnlyTransaction 调用周围使用 try-with-resources 表达式,以确保事务或 ResultSet 关闭,从而允许将相应的会话返回到会话池。
添加回答
举报
0/150
提交
取消