我在谷歌计算实例上使用谷歌云 SQL 驱动程序在长时间运行的批处理过程中将结果保存到谷歌云 SQL 数据库。
在某些时候,可能在运行的第一个小时之后,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 并重新启动批处理,并且连接会正常,直到令牌再次过期。
显然,命令行工具在连接之前正在做一些事情来刷新令牌;我如何为我的批处理做同样的事情?