【发布时间】:2019-02-07 06:53:11
【问题描述】:
任务是扩展现有的spring boot应用程序并覆盖一些bean并将其部署在spring boot中。
使用 Kotlin 语言。 所以我有spring boot应用程序(APP-A)
@SpringBootApplication
open class MyApp {
... //start staff here
}
我有一个模块 (MODULE-B),它通过依赖注入扩展了一些现有逻辑
open class ExtensionModule {
//... extension logic is here
}
对于这个模块,使用了弹簧自动配置。所以应该在spring容器中注册
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.ExtensionModule
当我在 pom.xml(APP-A) 中依赖 MODULE-B 时,一切正常。 我的目标是在 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 映像,而无需显式依赖?
【问题讨论】:
-
暂时忘记了 docker,你能给我一个命令如何在本地启动你的 APP-A(假设在构建 APP-A 时模块 B 不包含在它的依赖项中)并且它的工作方式你想要吗?
-
在 IntelliJ IDEA 中,我只运行 Spring Boot 应用程序“MyApp”的主类,在 pom.xml 中具有依赖关系,它与自动配置的 MODULE-B 一起工作正常
-
如果 MyApp 不知道模块 B,就无法在 MyApp 中使用模块 b 功能。所以,现在如果你同意将模块 b 作为依赖项,那么请按照这里给出的@Ilya 回答。
标签: spring spring-boot docker