无法从App Engine flex Java上的其他项目连接到Cloud SQL

时间:2018-10-11 09:39:26

标签: java google-app-engine google-cloud-platform google-cloud-sql app-engine-flexible

这里是抛出的异常:

javax.servlet.ServletException: javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

我稍后还会在堆栈跟踪中得到此消息:

Caused by: java.lang.RuntimeException: The Google Cloud SQL API is not enabled for project [xxxxxx]. Please use the Google Developers Console to enable it: https://console.cloud.google.com/apis/api/sqladmin/overview?project=xxxxxx

当我单击控制台链接时,我可以看到Cloud SQL Api已启用,并且当数据库位于同一项目中时,代码运行正常。我还添加了在包含Cloud SQL数据库且角色为App Engine flexible environment Service Agent的项目中具有Cloud SQL Client角色的AppEngine弹性服务帐户。

接下来我应该尝试什么?谢谢

更新

pom.xml:

-update2不再需要该文件-

2 个答案:

答案 0 :(得分:1)

访问其他项目中的Cloud SQL实例时,在源项目中启用Cloud SQL Admin API非常重要。复制错误消息中的链接,然后用其他项目ID替换项目ID。当前消息会误导您,因为它当前假设实例位于同一项目中。

答案 1 :(得分:0)

项目间Cloud SQL通信需要两件事:

  • 包含Cloud SQL实例的项目必须启用Cloud SQL Admin API
  • 想要访问它的项目在包含Cloud SQL实例(source)的项目上必须具有适当的Cloud SQL IAM角色:
  

不同项目中的App Engine和Cloud SQL

     

对于不同项目中的App Engine应用程序和Cloud SQL实例,您必须授予默认的Appengine服务帐户([PROJECT-ID]@appspot.gserviceaccount.com)以下IAM角色之一:

     
      
  • Cloud SQL客户端
  •   
  • Cloud SQL编辑器
  •   
  • Cloud SQL管理员
  •