2017-09-17 4 views
0

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é.

Répondre

0

Selon les docs de SpringBootServletInitiaizer:

Un opiniâtres WebApplicationInitializer pour exécuter un SpringApplication d'un déploiement traditionnel de WAR. Lie Servlet, Filter et ServletContextInitializer beans du contexte d'application au conteneur de servlets .
Si vous utilisez SpringBootServletInitializer dans la combinaison avec d'autres WebApplicationInitializers, vous pouvez également ajouter à une annotation @Ordered pour configurer un ordre de démarrage spécifique.
Notez qu'un WebApplicationInitializer n'est nécessaire que si vous créez un fichier war et le déployez. Si vous préférez exécuter un conteneur intégré, vous n'en aurez pas besoin du tout.

Tout ce que je faisais était de ne pas prolonger SpringBootServletInitiaizer pour le XYZToolApplication parce que je ne veux pas construire une guerre et le déployer avec ce contexte.