Spanner模拟器运行Spring Boot JPA项目报spanner.sessions.create权限缺失错误
问题原因
你遇到的权限报错核心原因是应用实际未连接到本地Spanner模拟器,而是默认请求了Google Cloud线上的Spanner服务:
- 你当前配置的JDBC连接URL没有指定模拟器相关参数,Spanner JDBC驱动默认会走线上服务地址,不会自动识别本地运行的模拟器
- 控制台输出的
DefaultCredentialsProvider警告也可以佐证:驱动正在加载你本地GCP SDK的用户凭证尝试请求线上服务,完全没有触发模拟器的无鉴权逻辑,你配置的test-project、test-instance都是线上不存在的测试资源,自然会返回IAM权限不足的错误。
解决方案
按以下步骤修改配置即可解决:
- 修改JDBC连接URL,添加模拟器配置参数
直接在现有URL后追加autoConfigEmulator=true参数,驱动会自动适配本地默认端口(9010)的模拟器、关闭鉴权校验:
如果你自定义了模拟器的启动端口,用以下格式配置即可:spring.datasource.url=jdbc:cloudspanner:/projects/test-project/instances/test-instance/databases/test-database?autoConfigEmulator=truespring.datasource.url=jdbc:cloudspanner://localhost:你的自定义端口/projects/test-project/instances/test-instance/databases/test-database?usePlainText=true - 确认本地模拟器已提前创建好对应资源
启动模拟器后,需要先创建对应测试实例和数据库才能正常连接:- 创建测试实例:
gcloud spanner instances create test-instance --config=emulator-config --description="Test Instance" --nodes=1 --project=test-project - 创建测试数据库:
gcloud spanner databases create test-database --instance=test-instance --project=test-project
- 创建测试实例:
- 重启Spring Boot应用,此时访问接口就不会再触发权限报错。
内容的提问来源于stack exchange,提问作者shanky442
相关产品推荐
相关产品推荐

