Spring Boot 3.3 с ошибкой базы данных поддержки CDS во время процесса сборкиJAVA

Программисты JAVA общаются здесь
Anonymous
Spring Boot 3.3 с ошибкой базы данных поддержки CDS во время процесса сборки

Сообщение Anonymous »

Я работаю над проектом Spring Boot 3.3 с Java 21 и реализую новую функцию поддержки CDS (обмен данными классов). Приложение представляет собой стандартное CRUD-приложение с REST API, которое подключается к базе данных PostgreSQL. Мой файл application.yml выглядит так:

Код: Выделить всё

spring:
datasource:
url: jdbc:postgresql://host.docker.internal:5433/mydatabase
username: myuser
password: secret
liquibase:
change-log: classpath:db/changelog/db.changelog-master.xml
contexts: schema, data
database-change-log-lock-table: ${liquibase.database-change-log-lock-table}
database-change-log-table: ${liquibase.database-change-log-table}
jpa:
properties:
hibernate.show_sql: false
hibernate.format_sql: true
hibernate.highlight_sql: true
hibernate.use_sql_comments: true
hibernate.generate_statistics: false
hibernate.hbm2ddl.auto: none # validate

audit:
enable-spring-jpa-listener: true

cache:
list:
- name: absence-by-id
time-to-live: 5m
enabled: true
default-time-to-live: 10m
enable-cache-validation: true
У меня также есть файл Dockerfile, который используется для сборки и запуска приложения. Dockerfile выглядит следующим образом:

Код: Выделить всё

FROM bellsoft/liberica-runtime-container:jdk-21-crac-cds-musl as builder

WORKDIR /home/app
ADD . /home/app/spring-boot-clean-architecture
RUN cd spring-boot-clean-architecture && ./mvnw -Dmaven.test.skip=true -Daether.dependencyCollector.impl=bf clean package

FROM bellsoft/liberica-runtime-container:jdk-21-cds-slim-musl

WORKDIR /home/app
COPY --from=builder /home/app/spring-boot-clean-architecture/target/*.jar app.jar
COPY --from=builder /home/app/spring-boot-clean-architecture/configuration/development/ config/
RUN mv config/application-development.yml config/application.yml
RUN java -Djarmode=tools -jar app.jar extract --layers --launcher

RUN cp -r app/application/* .
RUN cp -r app/dependencies/* .
RUN cp -r app/spring-boot-loader/* .
RUN java -Dspring.aot.enabled=true -XX:ArchiveClassesAtExit=./app/application.jsa -Dspring.context.exit=onRefresh org.springframework.boot.loader.launch.JarLauncher

EXPOSE 8080
ENTRYPOINT exec java $JAVA_OPTS -Dspring.aot.enabled=true -XX:SharedArchiveFile=./app/application.jsa org.springframework.boot.loader.launch.JarLauncher
Сборка Docker работает нормально, когда моя база данных PostgreSQL работает. Однако во время CI/CD, когда база данных может быть недоступна, сборка завершается со следующей ошибкой. Причина: java.net.ConnectException: соединение отклонено
И Docker ошибка сборки:

Код: Выделить всё

>>> RUN java -Dspring.aot.enabled=true -XX:ArchiveClassesAtExit=./app/application.jsa -Dspring.context.exit=onRefresh org.springframework.boot.loader.launch.JarLauncher
--------------------
ERROR: failed to solve: process "/bin/sh -c java -Dspring.aot.enabled=true -XX:ArchiveClassesAtExit=./app/application.jsa -Dspring.context.exit=onRefresh org.springframework.boot.loader.launch.JarLauncher" did not complete successfully: exit code: 1
Я рассматриваю следующие подходы, но не уверен, какой из них лучше:
  • Используйте отдельный файл application.yml для CI/CD: настройте базу данных H2, чтобы приложение запускалось без необходимости реального экземпляра PostgreSQL.
  • Исключения автоконфигурации: исключите DataSourceAutoConfiguration и JpaRepositoriesAutoConfiguration, но это приводит к ошибкам, поскольку мои компоненты репозитория требуют менеджер объекта.
    3.Любой другой подход: есть ли другой способ более эффективно справиться с этой ситуацией?
Как лучше всего справиться с этой ситуацией? зависимости базы данных во время процесса сборки CI/CD, чтобы избежать вышеупомянутых ошибок или использовать Spring Boot с поддержкой CDS?

Подробнее здесь: https://stackoverflow.com/questions/786 ... ld-process

Вернуться в «JAVA»