我有一个spring-boot应用程序,它在docker容器中工作,数据库配置非常简单:
spring:
datasource:
url: jdbc:postgresql://35.225.172.41/postgres
username: root
password: somePassword
Docker文件也尽可能简单:
FROM adoptopenjdk/openjdk14:slim
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
当我在本地运行应用程序时,我发现了如何访问数据库。我将我的本地机器IP地址添加到授权网络,如果我在docker中本地运行我的应用程序,我可以访问谷歌云SQL,也可以使用DataGrip连接到它。但当我将我的应用程序部署到谷歌应用程序引擎时,它无法连接到数据库。如何授予我的应用程序访问谷歌云sql的权限?我还向授权网络添加了应用程序IP地址,但IP地址是动态的。
我解决这个问题的方法完全错误。为了访问谷歌云slq,我不得不使用springcloudgcp。https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/main/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample
我所需要的只是添加所需的依赖项(在我的情况下:
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-gcp-dependencies:1.2.8.RELEASE"
}
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-gcp-starter-sql-postgresql'
创建谷歌云API密钥.json并设置应用程序。yml属性:
spring.cloud.gcp.credentials.location 'file:/api_key.json'
spring.cloud.gcp.sql.database-name: postgres
spring.datasource.username: someUsername
spring.datasource.password: somePass
spring.cloud.gcp.sql.instance-connection-name: proj-name:region:slq-instance-name
数据库URL是不需要的,springcloudgcp将创建它并将您的应用程序连接到云数据库。