我的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 并在此上下文中部署它。