¿Por qué mi Spring Boot App siempre se apaga inmediatamente después de comenzar?

Este es mi primer código de Spring Boot. Desafortunadamente, siempre se apaga. Esperaba que funcionara continuamente para que mi cliente web pudiera obtener algunos datos del navegador.

package hello; import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @Controller @EnableAutoConfiguration public class SampleController { @RequestMapping("/") @ResponseBody String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(SampleController.class, args); } } [@localhost initial]$ java -jar build/libs/gs-spring-boot-0.1.0.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.0.0.RC4) 2014-03-13 09:20:24.805 INFO 14650 --- [ main] hello.SampleController : Starting SampleController on localhost.localdomain with PID 14650 (/home/xxx/dev/gs-spring-boot/initial/build/libs/gs-spring-boot-0.1.0.jar started by xxx) 2014-03-13 09:20:25.002 INFO 14650 --- [ main] scaAnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@b9eec: startup date [Thu Mar 13 09:20:24 EDT 2014]; root of context hierarchy 2014-03-13 09:20:28.833 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Registering beans for JMX exposure on startup 2014-03-13 09:20:30.148 INFO 14650 --- [ main] oscsupport.DefaultLifecycleProcessor : Starting beans in phase 0 2014-03-13 09:20:30.154 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'requestMappingEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=requestMappingEndpoint] 2014-03-13 09:20:30.316 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'environmentEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=environmentEndpoint] 2014-03-13 09:20:30.335 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'healthEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=healthEndpoint] 2014-03-13 09:20:30.351 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'beansEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=beansEndpoint] 2014-03-13 09:20:30.376 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'infoEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=infoEndpoint] 2014-03-13 09:20:30.400 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'metricsEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=metricsEndpoint] 2014-03-13 09:20:30.413 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'traceEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=traceEndpoint] 2014-03-13 09:20:30.428 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'dumpEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=dumpEndpoint] 2014-03-13 09:20:30.450 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'autoConfigurationAuditEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=autoConfigurationAuditEndpoint] 2014-03-13 09:20:30.465 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'shutdownEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=shutdownEndpoint] 2014-03-13 09:20:30.548 INFO 14650 --- [ main] osbaejmx.EndpointMBeanExporter : Located managed bean 'configurationPropertiesReportEndpoint': registering with JMX server as MBean [org.springframework.boot:type=Endpoint,name=configurationPropertiesReportEndpoint] 2014-03-13 09:20:30.589 INFO 14650 --- [ main] hello.SampleController : Started SampleController in 7.396 seconds (JVM running for 9.569) 2014-03-13 09:20:30.608 INFO 14650 --- [ Thread-2] scaAnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@b9eec: startup date [Thu Mar 13 09:20:24 EDT 2014]; root of context hierarchy 2014-03-13 09:20:30.610 INFO 14650 --- [ Thread-2] oscsupport.DefaultLifecycleProcessor : Stopping beans in phase 0 2014-03-13 09:20:30.624 INFO 14650 --- [ Thread-2] osbaejmx.EndpointMBeanExporter : Unregistering JMX-exposed beans on shutdown 

Por favor avise.

Gracias

PS build.gradle es la culpa.

 dependencies { // tag::jetty[] compile("org.springframework.boot:spring-boot-starter-web") { **exclude module: "spring-boot-starter-tomcat"** } 

Una vez que quité la línea anterior en negrita, todo funciona. El contexto de mi aplicación ahora es correcto. Gracias Dave

  . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.0.0.RC4) 2014-03-13 13:58:08.965 INFO 7307 --- [ main] hello.Application : Starting Application on with PID 7307 (/ladev/home/xxx/dev/gs-spring-boot/initial/build/libs/gs-spring-boo t-0.1.0.jar started by xxx) 2014-03-13 13:58:09.021 INFO 7307 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshi ng org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@45490eb5: startup date [Thu Mar 13 13:58:09 MDT 2014]; root of context hierarchy 2014-03-13 13:58:09.653 INFO 7307 --- [ main] osbfsDefaultListableBeanFactory : Overridi ng bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=fal se; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanNam e=org.springframework.boot.actuate.autoconfigure.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration$WhitelabelErrorView Configuration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconf igure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; in itMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/au toconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]] 

Resolución: la aplicación no es una aplicación web porque no tiene un contenedor incrustado (por ejemplo, Tomcat) en el classpath. Agregar uno lo arregló. Si está usando Maven , luego agregue esto en pom.xml :

  org.springframework.boot spring-boot-starter-web  

Para Gradle ( build.gradle ) parece

 dependencies { compile 'org.springframework.boot:spring-boot-starter-web' } 

Aquí es cómo puedes solucionarlo:

  1. Compruebe si no tiene dependencia de spring-boot-starter-web en su archivo pom.xml. Para obtener el archivo pom.xml correcto, use este enlace start.spring.io

  2. Si tiene una dependencia anterior, pero aún enfrenta el problema, es muy posible que sus tarros de tomcat incorporados estén presentes. Para confirmar esto, ejecute maven build en modo de depuración –

mvn spring-boot:run --debug

y busca mensajes como –

[WARNING] error reading /Users/sparrowmac1/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/8.5.20/tomcat-embed-core-8.5.20.jar; invalid LOC header (bad signature) [WARNING] error reading /Users/sparrowmac1/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.8.10/jackson-core-2.8.10.jar; invalid LOC header (bad signature)

Si esos mensajes están presentes, purgue su repository local de maven e inténtelo de nuevo.

mvn dependency:purge-local-repository

Tuve el mismo problema pero cuando lo eliminé

  org.springframework.boot spring-boot-starter-tomcat provided  

comenzó a funcionar de nuevo.

En mi caso, el problema se presentó cuando solucioné un error de análisis estático que indicaba que no se usaba el valor de retorno de un método.

El código de trabajo anterior en mi Application.java era:

  public static void main(String[] args) { SpringApplication.run(Application.class, args); } 

El nuevo código que introdujo el problema fue:

  public static void main(String[] args) { try (ConfigurableApplicationContext context = SpringApplication.run(Application.class, args)) { LOG.trace("context: " + context); } } 

Obviamente, la prueba con el bloque de recursos cerrará el contexto después de iniciar la aplicación, lo que dará como resultado que la aplicación salga con el estado 0. Este fue un caso donde el error de fuga de recursos reportado por el análisis estático de snarqube debe ignorarse.

Creo que la respuesta correcta fue ¿Por qué la aplicación web Spring Boot se cierra inmediatamente después de comenzar? acerca de que starter-tomcat no está configurado y si está configurado y ejecutándose a través del IDE, el scope provisto debe comentarse. El scope no crea un problema mientras se ejecuta a través del comando. Me pregunto porque.

De todos modos acaba de agregar mis pensamientos adicionales.

Tal vez no se ajuste a su código pero descubrí si tiene un fragmento de código como este:

 @SpringBootApplication public class SpringBootApacheKafkaApplication { public static void main(String[] args) { SpringApplication.run(SpringBootApacheKafkaApplication.class,args).close(); } } 

luego simplemente elimine el método close (). ¡Eso solucionó mi problema! Tal vez pueda ayudar a alguien con eso

En mi caso, resolví este problema como a continuación:

  1. Primero C:\Users\myuserId\.m2\repository\org\apache (apache) C:\Users\myuserId\.m2\repository\org\apache

  2. pom.xml dependencias a continuación en mi archivo pom.xml

      org.springframework.boot spring-boot-starter-web  
  3. He cambiado el socket predeterminado agregando las líneas siguientes en el archivo de recursos ..\yourprojectfolder\src\main\resourcesand\application.properties (creé este archivo manualmente)

      server.port=8099 spring.profiles.active=@spring.profiles.active@ 

    para eso he agregado el bloque de abajo en mi pom.xml en la sección .

       . .   src/main/resources true   . .  

Mi último archivo pom.xml parece

   4.0.0 com.bhaiti spring-boot-rest 0.0.1-SNAPSHOT jar spring-boot-rest Welcome project for Spring Boot  org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE     UTF-8 UTF-8 1.8    org.springframework.boot spring-boot-starter   org.springframework spring-web   org.springframework.boot spring-boot-starter-web   org.springframework.boot spring-boot-starter-test test      org.springframework.boot spring-boot-maven-plugin     src/main/resources true     

este trabajo con arranque de spring 2.0.0

reemplazar

   org.springframework.boot spring-boot-starter-tomcat provided  

con

  org.apache.tomcat.embed tomcat-embed-core 9.0.6