Mengapa Aplikasi Booting Musim Semi saya selalu mati segera setelah memulai?


164

Ini adalah kode Boot Musim Semi pertama saya. Sayangnya, itu selalu dimatikan. Saya mengharapkannya untuk terus berjalan sehingga klien web saya bisa mendapatkan beberapa data dari browser.

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

Mohon saran.

Terima kasih

PS build.gradle adalah kesalahannya.

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

Begitu saya melepas garis di atas dalam huruf tebal, semuanya bekerja. Konteks aplikasi saya sekarang sudah benar. Terima kasih 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]]

Apakah Anda menggunakan Maven atau Gradle?
Romain Moreau

1
Anda ApplicationContextsalah ketik ( AnnotationConfigApplicationContext), jadi ini bukan webapp. Seharusnya default ke nilai yang tergantung pada classpath Anda, jadi sepertinya itu diatur atau default dengan cara yang salah. Mungkin Anda memiliki application.propertiesatau ENV var Anda tidak ditampilkan?
Dave Syer

Kamu benar. ApplicationContext saya salah. Saya tidak punya file application.properties. Bagaimana cara membuatnya menjalankan ApplicationContext yang benar? Mungkin Konteks Aplikasi web?
johnsam

Mari kita coba dan sederhanakan bangunannya. Bisakah Anda menghapus semua dependensi kecuali spring-boot-starter-web, dan kemudian jalankan dengan --debugpada baris perintah dan posting log kembali ke sini, tolong?
Dave Syer

Dave, saya memperbarui posting asli saya karena tanggapannya terlalu lama.
johnsam

Jawaban:


345

Resolusi: aplikasi ini bukan aplikasi web karena tidak memiliki wadah yang disematkan (mis. Tomcat) di classpath. Menambahkan satu memperbaikinya. Jika Anda menggunakan Maven , tambahkan ini di pom.xml:

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

Untuk Gradle ( build.gradle) sepertinya

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

Bagaimana kamu melakukannya ?
Maksimal

2
Luar biasa inilah yang saya lewatkan!
Taobitz

5
Saya punya aplikasi java sederhana lalu mengapa kita perlu menambahkan dependensi ini?
AMAN KUMAR

Tolong sebutkan bahwa ketergantungan ini harus menjadi yang pertama.
Cosmin Oprea

Tapi tidak. Hanya di jalan setapak.
Dave Syer

31

Inilah cara Anda memperbaikinya:

  1. Periksa apakah Anda tidak memiliki ketergantungan pada spring-boot-starter-web di file pom.xml Anda. Untuk memperbaiki file pom.xml Anda, gunakan tautan ini start.spring.io

  2. Jika Anda memiliki ketergantungan di atas, tetapi masih menghadapi masalah, sangat mungkin bahwa toples tempel yang disematkan hadir. Untuk mengonfirmasi ini, jalankan maven build dalam mode debug -

mvn spring-boot:run --debug

dan cari pesan seperti -

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

Jika ada pesan seperti itu, bersihkan repo pakar setempat dan coba lagi -

mvn dependency:purge-local-repository


setelah toples yang diperlukan hilang, dispatcherServlet tidak memulai. Jadi solusi di atas bekerja untuk saya.
user3029620

30

Saya memiliki masalah yang sama tetapi ketika saya dihapus

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

mulai bekerja lagi.


Aplikasi saya mulai berfungsi setelah saya menambahkan ketergantungan kucing jantan ini.
georgiana_e

1
@georgiana_e Aplikasi saya mulai berfungsi setelah saya menghapus ketergantungan tomcat: D Apa yang terjadi ??
Daria

: D sam as me @Daria.
RockOnGom

Saya mengganti Container Tertanam bawaan saya dengan Jetty untuk memperbaiki kesalahan. Sepertinya JAR Tomcat saya rusak, dan pembersihan .m2 diperlukan.
CᴴᴀZ

7

Mungkin tidak cocok dengan kode Anda tetapi saya tahu jika Anda memiliki potongan kode seperti ini:

@SpringBootApplication
public class SpringBootApacheKafkaApplication {

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

kemudian cukup hapus metode close (). Itu memperbaiki masalah saya! Mungkin saya bisa membantu seseorang dengan itu


3

Dalam kasus saya masalah diperkenalkan ketika saya memperbaiki kesalahan analisis statis bahwa nilai pengembalian metode tidak digunakan.

Kode kerja lama di Application.java saya adalah:

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

Kode baru yang menyebabkan masalah adalah:

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

Jelas, coba dengan blok sumber daya akan menutup konteks setelah memulai aplikasi yang akan menghasilkan aplikasi keluar dengan status 0. Ini adalah kasus di mana kesalahan kebocoran sumber daya yang dilaporkan oleh analisis statis snarqube harus diabaikan.


3

Dengan gradle, saya mengganti baris ini di file build.gradle.kts di dalam blok dependensi

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

dengan ini

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

dan bekerja dengan baik.



2

Hanya kemungkinan lain,

Saya diganti

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

dengan

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

dan itu dimulai tanpa masalah


1

ini bekerja dengan spring boot 2.0.0

menggantikan

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

dengan

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

1

Dalam kasus saya, saya memperbaiki masalah ini seperti di bawah ini: -

  1. Pertama saya hapus (apache) C:\Users\myuserId\.m2\repository\org\apache

  2. Saya menambahkan dependensi di bawah ini di pom.xmlfile saya

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  3. Saya telah mengubah soket default dengan menambahkan baris di bawah ini dalam file sumber daya ..\yourprojectfolder\src\main\resourcesand\application.properties(saya secara manual membuat file ini)

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

    untuk itu saya telah menambahkan blok di pom.xmlbawah ini di <build>bagian bawah saya .

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

pom.xmlFile akhir saya terlihat seperti

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

Jika Anda tidak ingin menjadikan pegas sebagai aplikasi web, tambahkan saja @EnableAsyncatau @EnableSchedulingke Starter Anda

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

}

0

dalam kasus saya, saya sudah memiliki ketergantungan pakar untuk 'spring-boot-starter-web' dan proyek akan dimulai dengan baik tanpa berhenti secara otomatis ketika saya menjalankannya sebagai aplikasi springboot dari dalam IDE . Namun, ketika saya menyebarkannya ke K8s , aplikasi akan memulai dan berhenti otomatis segera. Jadi saya memodifikasi kelas aplikasi utama saya untuk memperpanjang SpringBootServletInitializer dan ini tampaknya telah memperbaiki penghentian otomatis.

@SpringBootApplication public class MyApp extends SpringBootServletInitializer {  public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);  }}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.