У Google есть пример для подключения Cloud SQL-MYSQl из Spring JPA/Boot App (используется коммит 9ecdc1111e3da388a750ace41a125287d9620534). Пример использует Spring Data и отлично работает с 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
Но все же приложения терпят неудачу с
Ошибка создания bean-компонента с именем 'entityManagerFactory', определенным в классе ресурс пути [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Не удалось вызвать метод инициализации; вложенное исключение 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 = корень
И
Spring.datasource.password=корень
Но та же проблема образец опробован в Cloud Shell в Google Cloud,
Приложение gcloud auth — вход по умолчанию Вы работаете на виртуальной машине Google Compute Engine. учетные данные службы, связанные с этой виртуальной машиной, будут автоматически использоваться учетными данными приложения по умолчанию, поэтому это не необходимо использовать эту команду. Если вы все равно решите продолжить, ваши учетные данные пользователя могут быть видны другим пользователям, имеющим доступ к этой виртуальной машине. Ты уверен что хочешь авторизоваться в личном кабинете? Вы хотите продолжить (Т/Н)? н ОШИБКА: (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
Шаг 2: Создал базу данных с помощью
gcloud sql databases create petclinic --instance postgres-instance
Шаг 3: подключение к экземпляру 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
Шаг 5: В дополнение к вышеуказанным изменениям
В 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
Для получения четкой информации ознакомьтесь с этим документом
@puzzled Похоже, это ошибка аутентификации пароля. Попробуйте запустить gcloud auth application-login default и можете ли вы подтвердить, что можете подключиться postgresql с помощью gcloud sql connect INSTANCE-NAME ?
И убедитесь, что вы передаете правильные учетные данные под src/main/resources/application-postgres.properties
Это была ошибка пользователя, все работает Спасибо
Пример cloud.google.com/sql/docs/postgres/connect-instance-cloud-run не использует Spring Data JPA