我有Spring Boot应用程序,我想部署Heroku。但是我在Google Cloud的数据库。当我部署到本地Tomcat服务器时,应用程序连接到数据库,但Heroku无法连接到数据库。
- 我的数据源是正确的,因为我从本地应用程序连接到数据库。
1(本地应用程序连接是因为我使用'gcloud auth application-default登录'命令和'./mvnw -dskiptests spring-boot:run',因此我连接到Google Cloud Cloud MySQL数据库。
2(当我将IP提供给Google的SQL连接时,该应用程序连接,但Heroku却没有。在这种情况下,我需要使用Heroku应用程序的IP。
Caused by: java.lang.RuntimeException: Unable to obtain credentials to communicate with the Cloud SQL API
at com.google.cloud.sql.mysql.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:548)
at com.google.cloud.sql.mysql.SslSocketFactory.getInstance(SslSocketFactory.java:141)
at com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:47)
at com.mysql.jdbc.SocketFactoryWrapper.connect(SocketFactoryWrapper.java:57)
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65)
at com.mysql.cj.NativeSession.connect(NativeSession.java:152)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
... 82 common frames omitted
云SQL JDBC套接字工厂使用应用程序默认凭据(ADC(策略来查找凭据。
您可以使用GOOGLE_APPLICATION_CREDENTIALS
环境变量手动提供凭据,以指向服务帐户。您可以在此处找到更多详细说明。