簡體   English   中英

Spring 數據 JPA 與 Google Cloud Run Postgres 的應用程序連接

[英]Spring Data JPA app coonection to Google Cloud Run Postgres

Google 有一個從Spring JPA/Boot App連接 Cloud SQL-MYSQl 的示例(使用了提交 9ecdc1111e3da388a750ace41a125287d9620534)。 該示例使用 Spring 數據並與 MySQL 一起正常工作。但是當配置文件更改為 postgress 時它不起作用(在同一帳戶中啟動正確的 Postgres 數據庫並在#2中執行相同的步驟之后)

spring.profiles.active=postgres

並更換

  <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
with 
  <artifactId>spring-cloud-gcp-starter-sql-postgresql</artifactId>

replacing src/main/resources/application-mysql.properties 
with 
 src/main/resources/application-postgres.properties

但應用程序仍然失敗

在 class 路徑資源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class] 中定義名稱為“entityManagerFactory”的 bean 創建時出錯:調用 init 方法失敗; 嵌套異常是 org.hibernate.service.spi.ServiceException:無法創建請求的服務 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

我找不到任何樣本。

application-postgres.properties 附加有

spring.profiles.active=postgres
spring.cloud.gcp.sql.instance-connection-name= xyzprj:us-central1:postgres-instance
spring.datasource.username=xyzuser
spring.datasource.password=password

application-postgres.properties 替換如下

spring.datasource.username=xyzuser
spring.datasource.password=passord
spring.sql.init.mode=always
spring.cloud.gcp.sql.database-name=petclinic
spring.cloud.gcp.sql.instance-connection-name=xyzprj:us-central1:postgres-instance

后來這兩個屬性文件也被更改,以便

spring.datasource.username=root

spring.datasource.password=root

但在 Google Cloud 中的 Cloud Shell 上嘗試了相同的問題示例,

gcloud auth 應用程序-默認登錄

您正在 Google Compute Engine 虛擬機上運行。 與此虛擬機關聯的服務憑據將自動由應用程序默認憑據使用,因此無需使用此命令。

如果您決定繼續,您的用戶憑據可能會被有權訪問此虛擬機的其他人看到。 您確定要使用您的個人帳戶進行身份驗證嗎?

你想繼續嗎(是/否)? n

錯誤:(gcloud.auth.application-default.login)被用戶中止。


我試圖在我這邊重現該問題,但我能夠成功部署應用程序

這是我遵循的步驟

第 1 步使用以下命令創建postgresql

gcloud sql instances create postgres-instance \
--database-version=POSTGRES_13 \
 --cpu=1 \
 --memory=4GB \
 --region=us-central \
 --root-password=root

Step2:使用創建數據庫

gcloud sql databases create petclinic --instance postgres-instance

Step3:連接到PostgreSQL實例,驗證連接是否建立

gcloud sql connect postgres-instance

第 4步:像在application.properties中一樣替換以下內容

spring.profiles.active=postgres

並更換

      <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
    with 
      <artifactId>spring-cloud-gcp-starter-sql-postgresql</artifactId>

    replacing src/main/resources/application-mysql.properties 
    with 
     src/main/resources/application-postgres.properties

Step5:除以上改動外

application.properties替換

spring.cloud.gcp.sql.instance-connection-name= POSTGRESQL_CONNECTION_NAME

src/main/resources/application-postgres.properties添加

spring.datasource.username=USERNAME
spring.datasource.password=PASSWORD

pom.xml文件中添加以下依賴

<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>postgres-socket-factory</artifactId>
    <version>1.1.0</version>
</dependency>

build.grable文件中添加

dependencies {
    compile 'com.google.cloud.sql:postgres-socket-factory:1.1.0'
}

注意:運行gcloud auth application-default login以訪問默認憑據以與Cloud Sql API

有關清楚的信息,請查看此文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM