मेरा स्प्रिंग बूट ऐप हमेशा शुरू होने के तुरंत बाद बंद क्यों हो जाता है?


164

यह मेरा पहला स्प्रिंग बूट कोड है। दुर्भाग्य से, यह हमेशा बन्द हो जाता है। मैं इसे लगातार चलाने की उम्मीद कर रहा था ताकि मेरे वेब क्लाइंट को ब्राउज़र से कुछ डेटा मिल सके।

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] s.c.a.AnnotationConfigApplicationContext : 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] o.s.b.a.e.jmx.EndpointMBeanExporter      : Registering beans for JMX exposure on startup
2014-03-13 09:20:30.148  INFO 14650 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
2014-03-13 09:20:30.154  INFO 14650 --- [           main] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] o.s.b.a.e.jmx.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] s.c.a.AnnotationConfigApplicationContext : 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] o.s.c.support.DefaultLifecycleProcessor  : Stopping beans in phase 0
2014-03-13 09:20:30.624  INFO 14650 --- [       Thread-2] o.s.b.a.e.jmx.EndpointMBeanExporter      : Unregistering JMX-exposed beans on shutdown

कृपया सलाह दें।

धन्यवाद

PS build.gradle का दोष है।

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

एक बार जब मैंने उपरोक्त लाइन को बोल्ड में लिया, तो सब कुछ काम करता है। मेरा आवेदन संदर्भ अब सही है। धन्यवाद डेव

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: 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] o.s.b.f.s.DefaultListableBeanFactory     : 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]]

क्या आप मावेन या ग्रैडल का उपयोग कर रहे हैं?
रोमेन मोर्यू

1
आपका ApplicationContextगलत प्रकार ( AnnotationConfigApplicationContext) है, इसलिए यह वेबप नहीं है। यह उस मान पर डिफ़ॉल्ट होना चाहिए जो आपके वर्गपथ पर निर्भर करता है, इसलिए ऐसा लगता है कि इसे गलत तरीके से सेट या डिफ़ॉल्ट किया जा रहा है। हो सकता है कि आपके पास एक application.propertiesया एक ईएनवी संस्करण है जो आप नहीं दिखा रहे हैं?
डेव सीर

तुम सही हो। मेरा ApplicationContext गलत है। मेरे पास एक application.properties फ़ाइल नहीं है। मैं इसे सही ApplicationContext कैसे चलाऊं? शायद एक वेब अनुप्रयोग
जॉनसम

चलो कोशिश करते हैं और निर्माण को सरल करते हैं। क्या आप स्प्रिंग-बूट-स्टार्टर-वेब को छोड़कर सभी निर्भरताओं को हटा सकते हैं, और फिर --debugकमांड लाइन पर चल सकते हैं और लॉग को यहां पोस्ट कर सकते हैं, कृपया?
डेव सीर

डेव, मैंने अपनी मूल पोस्ट को अपडेट किया क्योंकि प्रतिक्रियाएं बहुत लंबी थीं।
जोहंसम

जवाबों:


345

रिज़ॉल्यूशन: ऐप वेबप नहीं है क्योंकि इसमें क्लासपैथ पर एक एम्बेडेड कंटेनर (जैसे टॉमकैट) नहीं है। एक तय करके जोड़ना। यदि आप मावेन का उपयोग कर रहे हैं , तो इसे इसमें जोड़ें pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

के लिए Gradle ( build.gradle) यह कैसा दिखता

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

आप उसे कैसे करते हैं ?
मैक्सिमम

2
बहुत बढ़िया यह मुझे याद आ रहा था!
ताबिज

5
मेरे पास एक साधारण जावा एप्लिकेशन है फिर हमें इस निर्भरता को जोड़ने की आवश्यकता क्यों है?
अमन कुमार

कृपया उल्लेख करें कि यह निर्भरता पहले वाली होनी चाहिए।
कॉस्मिन ओपरिया

हालांकि यह नहीं है। बस क्लासपाथ पर।
डेव सीर

31

यहाँ आप इसे कैसे ठीक कर सकते हैं:

  1. जांचें कि क्या आपकी pom.xml फ़ाइल में स्प्रिंग-बूट-स्टार्टर-वेब पर निर्भरता नहीं है। आपको pom.xml फ़ाइल सही पाने के लिए, इस लिंक start.spring.io का उपयोग करें

  2. यदि आपके पास निर्भरता से ऊपर है, लेकिन अभी भी समस्या का सामना कर रहा है, तो यह संभव है कि आपके एम्बेडेड टोमैट जार मौजूद हों। इसकी पुष्टि के लिए डेब्यू मोड में मावेन बिल्ड चलाएं -

mvn spring-boot:run --debug

और संदेशों की तलाश करें जैसे -

[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)

यदि इस तरह के संदेश मौजूद हैं, तो अपने स्थानीय मैवेन रेपो को शुद्ध करें और पुनः प्रयास करें -

mvn dependency:purge-local-repository


एक बार आवश्यक जार गायब हो जाते हैं, डिस्पैचरसर्वलेट शुरू नहीं होता है। इसलिए उपरोक्त समाधान मेरे लिए काम करता है।
user3029620

30

मुझे भी यही समस्या थी लेकिन जब मैंने हटाया

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
</dependency>

इसने फिर से काम करना शुरू कर दिया।


मेरे आवेदन के बाद मैंने काम करना शुरू कर दिया, जब मैंने इस टॉमकैट निर्भरता को जोड़ा।
georgiana_e

1
@ge Yorka_e मेरे आवेदन ने काम करना शुरू कर दिया जब मैंने टॉमकट निर्भरता को हटा दिया: डी क्या चल रहा है ??
दरिया

: D sam as me @ डारिया।
रॉकऑनगोम

मैंने त्रुटि को ठीक करने के लिए अपने डिफ़ॉल्ट एंबेडेड कंटेनर को जेट्टी के साथ बदल दिया । मेरे टोमाट जार की तरह लगता था, और एक .m2 पर्स की जरूरत थी।
C --Z

7

हो सकता है कि यह आपके कोड के अनुकूल न हो, लेकिन मुझे पता चला कि क्या आपके पास इस तरह का कोड स्निपेट है:

@SpringBootApplication
public class SpringBootApacheKafkaApplication {

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

तो बस करीब () विधि को हटा दें। यह तय है मेरी समस्या! शायद मैं किसी की मदद कर सकता हूं


3

मेरे मामले में समस्या तब पेश की गई जब मैंने एक स्थैतिक विश्लेषण त्रुटि तय की कि किसी विधि का वापसी मान उपयोग नहीं किया गया था।

मेरे Application.java में पुराना काम कोड था:

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

समस्या को पेश करने वाला नया कोड था:

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

जाहिर है, संसाधन ब्लॉक के साथ प्रयास आवेदन शुरू करने के बाद संदर्भ को बंद कर देगा जिसके परिणामस्वरूप आवेदन स्थिति 0. के साथ बाहर निकल जाएगा। यह एक ऐसा मामला था जहां स्नार्क्वे स्टेटिक विश्लेषण द्वारा रिपोर्ट किए गए संसाधन रिसाव त्रुटि को अनदेखा किया जाना चाहिए।


3

ग्रेडेल के साथ, मैंने इस लाइन को build.gradle.kts फ़ाइल पर निर्भरता ब्लॉक के अंदर बदल दिया

providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")

इसके साथ

compile("org.springframework.boot:spring-boot-starter-web")

और ठीक काम करता है।


2

मुझे लगता है कि सही उत्तर यह था कि स्प्रिंग बूट वेब ऐप शुरू होने के तुरंत बाद बंद क्यों हो जाता है? स्टार्टर-टॉमकैट के बारे में सेट नहीं किया जा रहा है और यदि आईडीई के माध्यम से सेट और रन किया जा रहा है, तो प्रदान किए गए दायरे को बंद कर दिया जाना चाहिए। स्कोप कमांड के माध्यम से चलते समय कोई समस्या पैदा नहीं करता है। मुझे आश्चर्य है क्योंकि।

वैसे भी मेरे अतिरिक्त विचारों को जोड़ा।


2

बस एक और संभावना है,

मैंने प्रतिस्थापित कर दिया

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

साथ में

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

और यह बिना किसी मुद्दे के शुरू हुआ


1

वसंत बूट के साथ यह काम 2.0.0

बदलने के

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
        </dependency>

साथ में

<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.6</version>
    </dependency>

1

मेरे मामले में मैंने इस मुद्दे को नीचे की तरह तय किया है: -

  1. पहले मैंने हटाया (अपाचे) C:\Users\myuserId\.m2\repository\org\apache

  2. मैंने अपनी pom.xmlफ़ाइल में निर्भरता को नीचे जोड़ा है

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  3. मैंने संसाधन फ़ाइल में नीचे लाइनें जोड़कर डिफ़ॉल्ट सॉकेट को बदल दिया है ..\yourprojectfolder\src\main\resourcesand\application.properties(मैंने मैन्युअल रूप से यह फ़ाइल बनाई है)

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

    उस के लिए मैं अपने में ब्लॉक नीचे जोड़ लिया है pom.xmlके तहत <build>खंड।

      <build>
      .
      .
     <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
       .
       .    
      </build>

मेरी अंतिम pom.xmlफ़ाइल जैसी दिखती है

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bhaiti</groupId>
    <artifactId>spring-boot-rest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>spring-boot-rest</name>
    <description>Welcome project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>       

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

    </build>


</project>

0

यदि आप अपने वसंत को एक वेब अनुप्रयोग नहीं बनाना चाहते हैं तो बस अपने स्टार्टर में जोड़ें @EnableAsyncया जोड़ें@EnableScheduling

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

}

0

मेरे मामले में मेरे पास पहले से ही 'स्प्रिंग-बूट-स्टार्टर-वेब' के लिए मावेन निर्भरता थी और आईडीई के भीतर से इसे स्प्रिंगबूट ऐप के रूप में चलाने पर प्रोजेक्ट ऑटो-स्टॉप के बिना ठीक शुरू हो जाएगा । हालाँकि, जब मैं इसे K8s पर तैनात करता हूँ , तो ऐप तुरंत शुरू हो जाता है और तुरंत बंद हो जाता है। इसलिए मैंने अपने मुख्य ऐप क्लास को SpringBootServletInitializer का विस्तार करने के लिए संशोधित किया और ऐसा लगता है कि ऑटो-स्टॉपिंग को ठीक कर दिया है।

@SpringBootApplication public class MyApp extends SpringBootServletInitializer {  public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);  }}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.