多个 Spring Boot 配置
Posted
技术标签:
【中文标题】多个 Spring Boot 配置【英文标题】:Multiple Sprint boot configurations 【发布时间】:2018-02-26 07:04:28 【问题描述】:我的 Spring Boot 应用程序中有两个带有 main 方法的类。
1. XYZToolApplication
2. XYZWebApplication
它们都扩展了SpringBootServletInitializer
。两者都用@SpringBootApplication
和@Configuration
注释。
我使用 Gradle 作为构建工具。
我想做两件事:
1. 使用bootRun
和战争部署运行XYZWebApplication
。
2. 每当bootRun
命令提供命令行参数args
时,仅使用bootRun
运行XYZToolApplication
。
我将build.gradle
修改为:
bootRun
main = 'com.XYZWebApplication'
if ( project.hasProperty('args') )
main = 'com.XYZToolApplication'
args project.args.split('\\s+')
classpath = sourceSets.main.runtimeClasspath + configurations.dev
jvmArgs = ["-Dspring.output.ansi.enabled=ALWAYS"]
war
doFirst
manifest
attributes(
"Implementation-Title": project.name,
"Implementation-Version": version,
"Implementation-Timestamp": new Date())
archiveName 'xyz.war'
虽然我可以根据需要运行 bootRun,但是当我创建一个 war 存档并将其部署到 Tomcat8 时,会创建两个上下文,一个用于 XYZWebApplication
,一个用于 XYZToolApplication
。我可以在日志(catalina.out)中看到这一点。我只想创建 XYZWebApplication
上下文。
日志快照:
...
2017-09-15 19:20:59.209 INFO 23727 --- [ost-startStop-1] XYZWebApplication : Started XYZWebApplication in 7.677 seconds (JVM running for 10.57)
....
2017-09-15 19:21:01.197 INFO 23727 --- [ost-startStop-1] XYZToolApplication : Started XYZToolApplication in 1.983 seconds (JVM running for 12.557)
我尝试在springBoot
任务和/或bootRepackage
任务和/或war
任务中指定主类,但没有帮助。
【问题讨论】:
【参考方案1】:根据SpringBootServletInitiaizer
的文档:
一个自以为是的 WebApplicationInitializer 来运行 SpringApplication 来自传统的 WAR 部署。绑定 Servlet、过滤器和 ServletContextInitializer bean 从应用程序上下文到 servlet 容器。 如果你在使用 SpringBootServletInitializer 与您可能还想要的其他 WebApplicationInitializer 组合 添加@Ordered 注释来配置特定的启动顺序。请注意,只有当您是 构建一个war文件并部署它。如果您更喜欢运行嵌入式 容器,那么你根本不需要这个。
所以我所做的只是不为XYZToolApplication
扩展SpringBootServletInitiaizer
,因为我不想在这种情况下发动战争并部署它。
【讨论】:
以上是关于多个 Spring Boot 配置的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot 1.4 测试:配置错误:发现@BootstrapWith 的多个声明
spring boot cloud kubernetes 配置不适用于多个 pod