我无法让 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.url
application.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