[英]maven fail in spring project build trying to establish connection with database
我為我的 spring 項目制作了一個 docker-compose 和 dockerfile,但它在 maven 構建階段失敗,因為它正在嘗試與 postgres 服務建立連接,我不知道如何解決它。
這是我的 docker-compose 文件:
version: '3'
services:
postgres:
build:
context: .
dockerfile: docker/postgres/Dockerfile
restart: always
environment:
POSTGRES_DB: ${postgres_database}
POSTGRES_USER: ${postgres_username}
POSTGRES_PASSWORD: ${postgres_password}
ports:
- '5432:5432'
volumes:
- ./pgdata:/var/lib/postgresql/data
api:
build:
context: .
dockerfile: docker/jdk/Dockerfile
restart: always
environment:
postgres_database: ${postgres_database}
postgres_username: ${postgres_username}
postgres_password: ${postgres_password}
ports:
- '8100:8080'
depends_on:
- postgres
我的 postgres dockerfile:
FROM postgres:11-alpine
ENV POSTGRES_DB: ${POSTGRES_DB}
ENV POSTGRES_USER: ${POSTGRES_USER}
ENV POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
COPY ./docker/postgres/init.sql /docker-entrypoint-initdb.d
EXPOSE 5432
我的 jdk dockerfile,我在其中構建了項目(它失敗了)並運行了 jar:
FROM maven:3.6.0-jdk-11-slim AS build
COPY ./src /usr/src/app/src
COPY ./pom.xml /usr/src/app
RUN mvn -f /usr/src/app/pom.xml clean package
FROM adoptopenjdk/openjdk11:jre11u-alpine-nightly
COPY --from=build /src/usr/src/app/target/logger_service-0.0.1-SNAPSHOT.jar /usr/src/app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/usr/app/app.jar"]
錯誤日志:
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 14.844 s <<< FAILURE! - in cl.getcolors.loggerservice.LoggerServiceApplicationTests
[ERROR] contextLoads(cl.getcolors.loggerservice.LoggerServiceApplicationTests) Time elapsed: 0.014 s <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution
Caused by: org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution
Caused by: org.postgresql.util.PSQLException: The connection attempt failed.
Caused by: java.net.UnknownHostException: postgres
我該如何解決?
我找到了解決方案,maven嘗試執行應用程序的測試,以便它根據配置執行對數據庫的調用,這是通過mvn clean package命令執行的。 -DskipTests必須將指令添加到命令以運行maven no tests,因此可以正確構建。
mvn clean package -DskipTests
我的dockerfile現在看起來像這樣,可以正常工作:
FROM maven:3.6.0-jdk-11-slim AS build
COPY ./src /usr/src/app/src
COPY ./pom.xml /usr/src/app
RUN mvn -f /usr/src/app/pom.xml clean package -DskipTests
FROM adoptopenjdk/openjdk11:jre11u-alpine-nightly
COPY --from=build /src/usr/src/app/target/logger_service-0.0.1-SNAPSHOT.jar /usr/src/app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/usr/app/app.jar"]
進一步補充上述說明,必須注意的是,在構建映像時無法訪問數據庫。 只有在創建容器后,程序才能訪問數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.