Подключение к базе данных Postgres выполнено успешно с использованием интерфейса командной строки psql, но завершается сбоем, когда те же учетные данные используются при загрузке Spring

#java #postgresql #spring-boot #hibernate #jpa

#java #postgresql #spring-boot #спящий режим #jpa

Вопрос:

Я пытался подключиться к моему локальному экземпляру postgres с помощью моего приложения spring boot. Однако я сталкиваюсь с проблемами с этим.

Некоторые из журналов, которые я получаю:

 org.postgresql.util.PSQLException: FATAL: password authentication failed for user "vitrag"
    at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:613)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:161)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:225)
    at org.postgresql.Driver.makeConnection(Driver.java:465)
    at org.postgresql.Driver.connect(Driver.java:264)
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358)
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206)
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:176)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
  

Я попробовал это из cmd, и он успешно подключается к БД

 psql --dbname clearances --username=adminuser --password=1234
  

Это моя настройка свойств приложения для этого подключения:

 ######## DATABASE CONNECTION ########
spring.datasource.url=jdbc:postgresql://localhost:5432/clearances
spring.datasource.username=adminuser
spring.datasource.password=1234
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.open-in-view=false
spring.jpa.hibernate.ddl-auto=none
  

Я не уверен, почему он подключается через psql и pgadmin с этими учетными данными, но не работает при загрузке Spring

Комментарии:

1. Привет, вероятно, это связано с вашей политикой подключения к экземпляру postgres, которая разрешает только локальное подключение (я предполагаю, что вы входите в систему с помощью pgsql на локальном сервере postgres или контейнере). пожалуйста, скопируйте содержимое /etc/postgresql/<version>/main/pg_hba.conf

2. В stacktrace пользователь — ‘vitrag’, а в вашей конфигурации — ‘adminuser’. Может быть, вы где-нибудь выполняете ручную настройку источника данных?

3. Для этого нет опции --password=1234 psql . Опция --password не принимает параметр. Его присутствие вызывает только запрос пароля.

4. Проблема заключалась в переменных env, которые мой STS искал для подключения к БД. Странно, потому что я жестко запрограммировал их впоследствии, но он все равно получил URL-адрес подключения и пароль имени пользователя из Env. Проблема была решена после удаления указанных переменных и перезапуска моего STS.

5. @a_horse_with_no_name Я знаю, что такой опции нет, я просто добавил ее, чтобы указать, что я использовал один и тот же пароль в обоих случаях