我的Spring Boot应用程序中有两个带有main方法的类。
1. XYZToolApplication
2. XYZWebApplication
它们都扩展了SpringBootServletInitializer。两者都用@SpringBootApplication@Configuration注释。

我正在使用Gradle作为构建工具。
我想做两件事:
1.使用XYZWebApplication运行bootRun并进行war部署。
2.每当XYZToolApplication命令提供命令行参数bootRun时,仅使用args运行bootRun

我将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。我可以在logs(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任务中指定主类,但没有帮助。

最佳答案

根据SpringBootServletInitiaizer的文档:



因此,我要做的就是不要将SpringBootServletInitiaizer扩展为XYZToolApplication,因为我不想建立 war 并在此上下文中部署它。

10-02 08:53