Spring Boot Uygulamam neden başladıktan hemen sonra kapanıyor?


164

Bu benim ilk Spring Boot kodum. Ne yazık ki, her zaman kapanıyor. Web istemcimin tarayıcıdan bazı veriler alabilmesi için sürekli çalışmasını bekliyordum.

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

Tavsiye lütfen.

Teşekkürler

PS build.gradle hatadır.

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

Yukarıdaki çizgiyi cesurca çıkardığımda, her şey işe yarıyor. Uygulama bağlamım şimdi doğru. Teşekkürler 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] 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]]

Maven veya Gradle kullanıyor musunuz?
Romain Moreau

1
Sizin ApplicationContextyanlış tür ( AnnotationConfigApplicationContext), bu yüzden bir web uygulaması değil. Varsayılan olarak sınıf yolunuza bağlı bir değere ayarlanmalıdır, dolayısıyla yanlış bir şekilde ayarlanmış veya varsayılan olarak ayarlanmış gibi görünür. Belki senin göstermediğin bir application.propertiesENV var mı?
Dave Syer

Haklısın. ApplicationContext'im yanlış. Bir application.properties dosyam yok. Doğru ApplicationContext'i çalıştırmasını nasıl sağlayabilirim? Belki bir Web ApplicationContext?
Mart'ta johnsam

Yapmayı basitleştirmeye çalışalım. Spring-boot-starter-web dışındaki tüm bağımlılıkları kaldırabilir ve ardından --debugkomut satırında çalışabilir ve günlükleri buraya geri gönderebilir misiniz?
Dave Syer

Dave, yanıtlar çok uzun olduğu için orijinal yayınımı güncelledim.
johnsam

Yanıtlar:


346

Çözüm: Uygulama bir web uygulaması değil çünkü sınıf yolunda gömülü bir kapsayıcı (örn. Tomcat) yok. Birini eklemek düzeltildi. Maven kullanıyorsanız , bunu şuraya ekleyin pom.xml:

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

For Gradle ( build.gradle) benzediğini

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

Bunu nasıl yaptın ?
maxime

2
Mükemmel bu ne eksikti!
Taobitz

5
Basit bir java uygulamam var, o zaman neden bu bağımlılığı eklememiz gerekiyor?
AMAN KUMAR

Lütfen bu bağımlılığın birincisi olması gerektiğini belirtin.
Cosmin Oprea

Olmaz. Sadece sınıf yolunda.
Dave Syer

31

Bunu nasıl düzeltebileceğiniz aşağıda açıklanmıştır:

  1. Pom.xml dosyanızda spring-boot-starter-web'e bağımlılığınızın olup olmadığını kontrol edin. Size pom.xml dosyasını doğru olarak almak için bu bağlantı start.spring.io'yu kullanın

  2. Yukarıdaki bağımlılığınız varsa, ancak yine de sorunla karşı karşıyaysanız, gömülü tomcat kavanozlarınızın mevcut olması mümkündür. Bunu onaylamak için maven derlemesini hata ayıklama modunda çalıştırın -

mvn spring-boot:run --debug

ve şuna benzer iletileri arayın:

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

Bu tür mesajlar varsa, yerel maven deponuzu temizleyin ve tekrar deneyin -

mvn dependency:purge-local-repository


gerekli kavanozlar eksik olduğunda dispatcherServlet başlamaz. Yukarıdaki çözüm benim için çalışıyor.
user3029620

30

Aynı problemim vardı ama kaldırdığımda

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

tekrar çalışmaya başladı.


Bu tomcat bağımlılığını ekledikten sonra başvurum çalışmaya başladı.
georgiana_e

1
@georgiana_e Tomcat bağımlılığını kaldırdıktan sonra uygulamam çalışmaya başladı: D Neler oluyor ??
Daria

: D sam benim gibi @Daria.
RockOnGom

Hatayı düzeltmek için varsayılan Gömülü Konteynerimi Jetty ile değiştirdim . Görünüşe göre Tomcat JAR'larım kırıldı ve .m2 tasfiyesi gerekiyordu.
CᴴᴀZ

7

Belki kodunuza uymuyor ama böyle bir kod parçacığı varsa öğrendim:

@SpringBootApplication
public class SpringBootApacheKafkaApplication {

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

sonra sadece close () yöntemini kaldırın. Sorunum düzeltildi! Belki birisine yardım edebilirim


3

Benim durumumda, bir yöntemin dönüş değerinin kullanılmadığı bir statik analiz hatasını düzelttiğimde sorun ortaya çıktı.

Benim Application.java eski çalışma kodu:

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

Sorunu tanıtan yeni kod şuydu:

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

Açıkçası, kaynak bloğu ile deneme, uygulama başlatıldıktan sonra bağlamı kapatır ve bu durum, uygulamanın durum 0'dan çıkmasına neden olur. Bu, snarqube statik analizi tarafından bildirilen kaynak kaçağı hatasının göz ardı edilmesi gereken bir durumdu.


3

Gradle ile, bağımlılıklar bloğunun içindeki build.gradle.kts dosyasındaki bu satırı değiştirdim

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

Bununla

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

ve iyi çalışıyor.



2

Başka bir olasılık,

Ben değiştirdim

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

ile

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

ve sorunsuz bir şekilde başladı


1

bahar çizme 2.0.0 ile bu çalışma

değiştirmek

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

ile

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

1

Benim durumumda bu sorunu aşağıdaki gibi çözdüm: -

  1. Önce kaldırdım (apache) C:\Users\myuserId\.m2\repository\org\apache

  2. Benim de bağımlılıkları altına eklenen pom.xmldosyanın

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  3. Kaynak dosyaya aşağıdaki satırları ekleyerek varsayılan soketi değiştirdim ..\yourprojectfolder\src\main\resourcesand\application.properties(bu dosyayı elle oluşturdum)

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

    Bunun için benim blok aşağıda eklemiş pom.xmlaltında <build>bölümünde.

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

Son pom.xmldosyam şöyle görünüyor

<?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

Baharınızı bir web uygulaması yapmak istemiyorsanız , Başlangıç @EnableAsyncveya@EnableScheduling

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

}

0

benim durumumda zaten 'spring-boot-starter-web' maven bağımlılığı vardı ve ben IDE içinden springboot uygulaması olarak çalıştırdığınızda proje otomatik olarak durmadan iyi başlayacaktı . Ancak, K8s için dağıttığınızda , uygulama hemen başlayacak ve otomatik olarak duracaktır. Bu yüzden SpringBootServletInitializer'ı genişletmek için ana uygulama sınıfımı değiştirdim ve bu otomatik durdurmayı düzeltmiş gibi görünüyor.

@SpringBootApplication public class MyApp extends SpringBootServletInitializer {  public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);  }}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.