Reputation: 1
The errors:
2024-02-20 16:40:35.801 UTC [1] LOG: database system is ready to accept connections api_service-1 | 2024-02-20T16:40:35.950Z ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. api_service-1 | api_service-1 | org.postgresql.util.PSQLException: FATAL: the database system is not yet accepting connections api_service-1 | Detail: Consistent recovery state has not been yet reached. api_service-1 | at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:693) ~[postgresql-42.6.0.jar!/:42.6.0]
2024-02-20T16:40:35.955Z WARN 1 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata
api_service-1 |
api_service-1 | java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value
of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "java_to_dev"
2024-02-20T16:40:52.054Z ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context wi th path [] threw exception [Request processing failed: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction] with root cause
My docker-compose.yml
version: "3.7"
services:
api_service:
build: .
restart: always
ports:
- "8080:8080"
depends_on:
- postgresql_db
links:
- postgresql_db:postgresql_db
postgresql_db:
image: "postgres:15-alpine3.17"
restart: always
ports:
- "5432:5432"
environment:
- POSTGRES_DB= java_to_dev_app_db
- POSTGRES_USER= java_to_dev
- POSTGRES_PASSWORD=
- SPRING_DATASOURCE_URL= jdbc:postgresql://postgresql_db/java_to_dev_app_db
My application.properties
spring.datasource.url=jdbc:postgresql://postgresql_db/java_to_dev_app_db
spring.datasource.username=java_to_dev
spring.datasource.password=
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=none
spring.jpa.defer-datasource-initialization=true
spring.sql.init.mode=always
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
The Dockerfile
FROM openjdk:17
ADD /target/mine-0.0.1-SNAPSHOT.jar backend.jar
ENTRYPOINT ["java", "-jar", "backend.jar"]
mvn dependency
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Upvotes: 0
Views: 1198
Reputation: 385
First I believe your config is confusing. You could consider removing config from application.properties and move it to docker-compose.yaml, like that:
version: '2'
services:
app:
image: 'docker-spring-boot-postgres:latest'
build:
context: .
container_name: app
depends_on:
- db
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/java_to_dev_app_db
- SPRING_DATASOURCE_USERNAME=java_to_dev
- SPRING_DATASOURCE_PASSWORD=test_password
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
db:
image: 'postgres:13.1-alpine'
container_name: db
environment:
- POSTGRES_DB=java_to_dev_app_db
- POSTGRES_USER=java_to_dev
- POSTGRES_PASSWORD=test_password
Adding spaces to config might look like an easy way to make it more readable but I would say keep it simple, as space is a valid character in passwords and your configuration is a bit confusing.
I believe adding a port is a good practice, even if you are using a default since in case of a change you know immediately where to change it.
Remove these:
spring.datasource.url=jdbc:postgresql://postgresql_db/java_to_dev_app_db
spring.datasource.username=java_to_dev
spring.datasource.password=
from application.properties and it has to work.
Also, by default if your code is not exposing any endpoints then the app will just stop, so make sure the app is listening.
Upvotes: 0