Atualmente, estou desenvolvendo um aplicativo de Sistema de Gerenciamento de Bibliotecas (LMS) baseado em Java . A pilha de tecnologia inclui Spring Boot para o backend, JavaFX para o frontend, JUnit para testes e PostgreSQL como banco de dados. O banco de dados é conteinerizado usando Docker com a seguinte docker-compose.yml
configuração:
version: '3'
services:
postgres:
image: postgres:14.2
container_name: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- ./src/main/resources/initial_data_generation.sql:/docker-entrypoint-initdb.d/init.sql
Nele, o caminho para o arquivo de inicialização do meu banco de dados já concedeu a propriedade do banco de dados ao postgres
usuário usando um comando (veja o arquivo para mais detalhes):
...
CREATE DATABASE "library-system-db" WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE = 'en_US.utf8';
ALTER DATABASE "library-system-db" OWNER TO postgres;
\connect -reuse-previous=on "dbname='library-system-db'"
...
Além disso, o application.properties
arquivo é configurado para se conectar ao banco de dados depois que o contêiner estiver ativo:
## Database connection
spring.datasource.url=jdbc:postgresql://${DATABASE_HOST:localhost}:${DATABASE_PORT:5432}/${DATABASE_NAME:library-system-db}
spring.datasource.username=${DATABASE_USERNAME:postgres}
spring.datasource.password=${DATABASE_PASSWORD:password}
# JPA Properties
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
Após a execução docker compose up -d
, verifiquei os logs e confirmei que o contêiner estava funcionando corretamente. Também acessei o terminal do contêiner para verificar diretamente e vi que o banco de dados foi criado.
No entanto, quando executo o aplicativo por meio do main()
método, a compilação falha e gera o erro:
FATAL: database "library-system-db" does not exist
Você pode encontrar mais detalhes no arquivo de log em anexo . O log também sugere que alguns outros erros podem estar relacionados a esse problema raiz.
Eu realmente apreciaria quaisquer sugestões ou soluções que você possa ter para resolver esse problema 🙏
PS: O projeto que estou desenvolvendo é baseado no código-fonte do Github criado por Kwame Mintah . Avise-me se precisar de mais informações!
Para iniciar a solução de problemas, recomendo verificar se há alguma instância local do PostgreSQL em execução na sua máquina, além da versão Dockerizada. Se houver alguma instância em execução, interrompa-a ou encerre-a para evitar possíveis conflitos.
Em seguida, sugiro modificar as propriedades do seu aplicativo para usar o endereço IP real do host em vez de
localhost
. Especificamente, substitualocalhost
por127.0.0.1
na seguinte configuração:Este ajuste deve resolver quaisquer problemas de conexão que você esteja enfrentando.
Na minha experiência, ocasionalmente ocorreu que o arquivo hosts não foi atualizado, o que pode impedir o acesso à instância do Docker por meio de
localhost
. Usar o endereço IP direto do host,127.0.0.1
, deve atenuar esse problema.Além disso, enquanto você estiver solucionando problemas, não há necessidade de carregar valores de propriedades, vamos usar diretamente
hostname, port and databaseName
Atualize a configuração e monitore o comportamento.
Acredito que o banco de dados esteja conectado corretamente, e o erro parece ser causado pelo banco de dados não encontrado. Verifique se o usuário do banco de dados com o qual você está fazendo login possui as permissões adequadas para esse banco de dados. Parece que o erro ocorreu porque
postgres
ele não possui as permissões necessárias.Se essa for realmente a causa, conceda as permissões usando o comando abaixo.