多个 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配置多个DataSource

spring boot cloud kubernetes 配置不适用于多个 pod

使用 spring boot 配置多个 servletcontainers/servlet

Spring boot配置多个Redis数据源操作实例

spring boot 中的多个 liquibase 配置