В настоящее время я настраиваю базу данных postgreSQL для своего проекта весенней загрузки. Однако, когда я пытаюсь запустить сервер Tomcat, я получаю исключение, сообщающее, что из-за этого не удалось создать компоненты репозитория:
Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution [FATAL: password authentication failed for user "dev-user"] [n/a]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) ~[spring-orm-6.1.11.jar:6.1.11]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.11.jar:6.1.11]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) ~[spring-orm-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.11.jar:6.1.11]
... 101 common frames omitted
В моем файле свойств.yml у меня есть это:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/authentication_db
username: dev-user
password: password
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: false
properties:
hibernate:
format_sql: true
database: postgresql
database-platform: org.hibernate.dialect.PostgreSQLDialect
В моем docker-compose.yml у меня есть это:
services:
postgres:
container_name: postgres-sql-pa
image: postgres
environment:
POSTGRES_USER: dev-user
POSTGRES_PASSWORD: password
PGDATA: /var/lib/postgresql/data
POSTGRES_DB: authentication_db
volumes:
- postgres:/data/postgres
ports:
- 5432:5432
networks:
- spring-demo
restart: unless-stopped
Почему у меня такое исключение? Я вижу, что докер-контейнер работает нормально, и информация в базе данных сообщает мне, что свойства db_name, username, пароль установлены правильно.
Я уже использую его, я даже установил пароль в базе данных как «пароль», чтобы дважды проверить, но все еще не могу подключиться.
может быть, у вас уже установлен Postgres и работает как программа рядом с контейнером? проверьте, используя другой порт для докер-контейнера (например, 5433
) и попробуйте подключиться к нему
Я заменил 5432:5432 на 5433:5433, но докер все еще показывает, что база данных работает в 5432. Есть ли еще место, где мне нужно это изменить?
ни один докер по-прежнему не должен работать в 5432, вам нужно просто сопоставить его с 5433 на своем хосте (сделано с помощью - 5433:5432
в вашем docker-compose.yml
). Также не забудьте обновить URL-адрес в свойствах на url: jdbc:postgresql://localhost:5433/authentication_db
.
Есть ли у вас какая-либо документация или пример того, как это сделать?
обновил свой комментарий
К вашему вопросу добавьте следующую информацию: 1) Версия Postgres. 2) Соответствующая информация из журнала Postgres о попытке подключения. 3) Соответствующая часть pg_hba.conf
. 4) Вы переносили данные из другой базы данных в эту?
Здравствуйте, исправление было предоставлено @JAsgarov, я сделал то, что он упомянул, и теперь работает.
Исправление, которое сработало для меня, было основано на комментарии @JAsgarov. Базовое изменение с 5432:5432 на 5433:5432 и обновление URL-адреса.
просто для уточнения, а не исправления, просто обходного пути к тому факту, что на вашем компьютере порт 5432
уже занят каким-то другим приложением (скорее всего, postgres либо установлен как программа, либо работает в другом контейнере). Рад, что это помогло
Да, большое спасибо за всю помощь, которую вы оказываете и в других постах!
Довольно очевидный FATAL: для пользователя «dev-user» не удалось выполнить аутентификацию по паролю]. Используйте правильный пароль.