我正在Google Compute Instance上使用Google Cloud SQL驱动程序,以在长时间运行的批处理过程中将结果保留到Google Cloud SQL数据库。如何在使用Google Cloud SQL JDBC驱动程序时刷新OAuth令牌?
在某些时候,或许运行的第一个小时后,OAuth令牌似乎到期,以及所有后续请求失败:
Caused by: java.sql.SQLException: 400 Bad Request
{
"error" : "unauthorized_client"
}
at com.google.cloud.sql.jdbc.internal.googleapi.RpcGoogleApi.newOpenConnectionIOException(RpcGoogleApi.java:168)
at com.google.cloud.sql.jdbc.internal.googleapi.RpcGoogleApi.openConnection(RpcGoogleApi.java:104)
at com.google.cloud.sql.jdbc.internal.SqlProtoClient.openConnection(SqlProtoClient.java:58)
at com.google.cloud.sql.jdbc.Driver.connect(Driver.java:66)
at com.google.cloud.sql.Driver.connectImpl(Driver.java:109)
at com.google.cloud.sql.Driver.connect(Driver.java:98)
at com.google.cloud.sql.Driver.connect(Driver.java:31)
我可以从客户端中止进程,运行google_sql.sh并重新启动批处理过程,连接将会正常,直到令牌再次到期。
显然,命令行工具在连接之前正在做一些刷新令牌的操作;我如何对我的批处理进行同样的操作?
什么是google_sql.sh? – pinoyyid
@pinoyyid google_sql.sh是谷歌云SDK中提供的命令行工具,它启动了com.google.cloud.sql.tool.googleapi.SqlTool。这显然做了一些刷新认证令牌,但没有记录。 – akbertram
明白了。我会做一些挖掘 – pinoyyid