J'ai deux classes avec la méthode principale dans mon application Spring Boot.
1. XYZToolApplication
2. XYZWebApplication
Les deux s'étendent SpringBootServletInitializer
. Les deux sont annotés avec @SpringBootApplication
et @Configuration
. J'utilise Gradle comme outil de construction.
Je veux faire deux choses:
1. Exécutez XYZWebApplication
en utilisant bootRun
et le déploiement de guerre.
2. Exécutez XYZToolApplication
en utilisant uniquement bootRun
chaque fois qu'un argument de ligne de commande args
est fourni avec la commande bootRun
.Configurations de démarrage Sprint multiples
J'ai modifié le build.gradle
comme:
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'
}
Alors que je suis en mesure d'exécuter bootRun comme vous le souhaitez, mais quand je crée une archive de guerre et de déployer à Tomcat8, il y a deux contextes créés, l'un pour XYZWebApplication
et un pour XYZToolApplication
. Je peux le voir dans les logs (catalina.out). Je veux que seul le contexte XYZWebApplication
soit créé.
claquant des bûches:
...
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)
J'ai essayé spécifier la classe principale springBoot
tâche et/ou bootRepackage
tâche et/ou war
tâche, mais il n'a pas aidé.