0

我无法让 Google 的spring-data-jpa-sample 项目在 Spanner 模拟器上运行。我在 MacOS Mojave 上使用预装的 JDK 11(AdoptOpenJDK build 11.0.3+7)。

我已经对我的 GCP 帐户进行了身份验证,并按照此处记录的方式完成了模拟器设置,按照说明启动模拟器,成功创建实例,并将SPANNER_EMULATOR_HOST环境变量设置为localhost:9010.

当 Spring 应用程序运行时,它会失败并出现以下错误:

java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30088ms.

在此之前有两个警告。HHH000342:无法获取到查询元数据的连接)和 SQL 错误:0,SQLState:null。

如果我更新 spring.datasource.url 以添加usePlainText=true最后,我在这里看到了建议的解决方案,结果是一样的。

应用程序代码和配置与spring-data-jpa-sample 项目中显示的完全相同,这就是为什么我没有在此处发布它 - 除了spring.datasource.urlapplication.properties 中的值(见下文)。要复制此问题,请按照此处的模拟器设置说明 ,克隆存储库,设置项目、实例和数据库变量并运行代码示例。

这是application.properties文件的内容:

# Application configuration to use Cloud Spanner with Spring Data JPA

# Spanner connection URL.
# - ${PROJECT_ID} Replace with your GCP project ID
# - ${INSTANCE_ID} Replace with your Spanner instance ID
# - ${DATABASE_NAME} Replace with your Spanner database name within your Spanner instance
spring.datasource.url=jdbc:cloudspanner:/projects/test-project/instances/test-instance/databases/spring-demo?usePlainText=true

# Specify the Spanner JDBC driver.
spring.datasource.driver-class-name=com.google.cloud.spanner.jdbc.JdbcDriver

# Specify the Spanner Hibernate dialect.
spring.jpa.properties.hibernate.dialect=com.google.cloud.spanner.hibernate.SpannerDialect

spring.jpa.hibernate.ddl-auto=update

# Settings to enable batching statements for efficiency
spring.jpa.properties.hibernate.jdbc.batch_size=100

# You may display SQL statements and stats for debugging if needed.
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
4

1 回答 1

1

尽管仔细检查,我们还是错过了设置数据库的重要步骤:

gcloud spanner databases create spring-demo --instance=test-instance 

现在一切都很好。

于 2020-09-24T15:48:20.710 回答