gpt4 book ai didi

java - spring boot 在提取 jar 时运行 JarLauncher

转载 作者:行者123 更新时间:2023-12-05 02:04:43 24 4
gpt4 key购买 nike

我正在使用 spring boot 构建一个 fat jar,这个 fat jar 可以使用

java -jar app.jar

问题是我正在使用 docker,我想扩展 jar 内容以获得更好的可用性,我执行以下操作来提取:

unzip app.jar

现在我用以下内容运行 jar :

java -cp "." org/springframework/boot/loader/JarLauncher

我收到以下错误:

 Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jaxRsServer' defined in class path resource 

所以它无法找到我的 bean,尽管它已配置:

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@ImportResource("classpath:spring/beans_context.xml")
public class SpringBootJaxrsApplication {

public static void main(String[] args) {
SpringApplication.run(SpringBootJaxrsApplication.class, args);
}

}

beans_context.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />


<import resource="classpath:META-INF/spring/*_context.xml"/>

最佳答案

您使用的是哪个 Spring Boot 版本?从 2.3.0 开始,一种新的分层模式可用于打包 fat JAR。启用分层模式后,您就可以执行类似的操作来构建 Docker 镜像。

FROM adoptopenjdk:11-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM adoptopenjdk:11-jre-hotspot
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/resources/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

注意命令是 java org.springframework.boot.loader.JarLauncher

此示例在 post 中有完整解释来自 Spring 博客。有关 Spring Boot 2.3 中分层如何工作的更多信息,您可以引用此 post ,同样来自 Spring 博客。

相反,如果您使用的是旧版本的 Spring Boot,则可以按照此 post 中的说明构建 Dockerfile。 .在这种情况下,入口点将是 java -cp app:app/lib/* hello.Application

FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","hello.Application"]

关于java - spring boot 在提取 jar 时运行 JarLauncher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64195214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com