任务是扩展现有的Spring Boot应用程序并覆盖某些Bean并将其部署在Spring Boot中。
使用科特林语。 所以我有Spring Boot应用程序(APP-A)
@SpringBootApplication
open class MyApp {
... //start staff here
}
我有一个模块(MODULE-B),该模块通过依赖注入扩展了一些现有的逻辑
open class ExtensionModule {
//... extension logic is here
}
对于此模块,使用弹簧自动配置。所以应该在弹簧容器中注册
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.ExtensionModule
当我在MODULE-B上的pom.xml(APP-A)中具有依赖性时,一切正常。 我的目标是在pom.xml中构建不依赖的docker映像,因此在这种情况下,APP-A对MODULE-B一无所知,但逻辑将得到扩展,就像使用基于旧的spring容器classpath-xml的方法一样 我测试了下一个Dockerfile
FROM openjdk:8-jre
ADD app-a.jar /usr/share/jvmservice/app-a.jar
ADD module-b.jar /usr/share/jvmservice/module-b.jar
ENTRYPOINT exec /usr/bin/java $JAVA_OPTS -jar /usr/share/jvmservice/app-a.jar
结果是成功启动了app-a,但未应用对module-b的更改。 是否可以在一个Spring容器中由两个jar组成docker镜像,而无需显式依赖?
答案 0 :(得分:1)
您需要将module-b.jar
添加到类路径,请使用以下命令进行操作
FROM openjdk:8-jre
COPY app-a.jar /usr/share/jvmservice/app-a.jar
COPY module-b.jar /usr/share/jvmservice/ext/module-b.jar
ENTRYPOINT exec /usr/bin/java $JAVA_OPTS -Dloader.path="/usr/share/jvmservice/ext/" -jar /usr/share/jvmservice/app-a.jar
有关更多信息,请参见Launching Executable Jars