To jest mój pierwszy kod Spring Boot. Niestety zawsze się wyłącza. Spodziewałem się, że będzie działać w sposób ciągły, aby mój klient sieciowy mógł pobierać dane z przeglądarki.
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
Proszę doradź.
Dzięki
PS build.gradle to wina.
dependencies {
// tag::jetty[]
compile("org.springframework.boot:spring-boot-starter-web") {
**exclude module: "spring-boot-starter-tomcat"**
}
Kiedy już zdjąłem powyższą linię pogrubioną czcionką, wszystko działa. Kontekst mojej aplikacji jest teraz poprawny. Dzięki, 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]]
java
spring
spring-boot
johnsam
źródło
źródło
ApplicationContext
jest niewłaściwego typu (AnnotationConfigApplicationContext
), więc nie jest to aplikacja internetowa. Powinien domyślnie mieć wartość zależną od ścieżki klas, więc wygląda na to, że jest ustawiana lub domyślna w niewłaściwy sposób. Może maszapplication.properties
zmienną ENV lub ENV, której nie wyświetlasz?--debug
wierszem poleceń i przesłać dzienniki z powrotem tutaj, proszę?Odpowiedzi:
Rozwiązanie: aplikacja nie jest aplikacją internetową, ponieważ nie ma osadzonego kontenera (np. Tomcat) w ścieżce klas. Dodanie jednego rozwiązało problem. Jeśli używasz Mavena , dodaj to w
pom.xml
:Dla Gradle (
build.gradle
) to wyglądaźródło
Oto, jak możesz to naprawić:
Sprawdź, czy nie masz zależności od spring-boot-starter-web w pliku pom.xml. Aby poprawnie uzyskać plik pom.xml, użyj tego linku start.spring.io
Jeśli masz powyższą zależność, ale nadal masz problem, jest wysoce prawdopodobne, że są obecne osadzone słoiki Tomcat. Aby to potwierdzić, uruchom maven build w trybie debugowania -
i poszukaj wiadomości typu -
Jeśli takie wiadomości są obecne, wyczyść lokalne repozytorium Maven i spróbuj ponownie -
źródło
Miałem ten sam problem, ale kiedy usunąłem
znowu zaczęło działać.
źródło
Może to nie pasuje do twojego kodu, ale dowiedziałem się, czy masz taki fragment kodu:
następnie po prostu usuń metodę close (). To rozwiązało mój problem! Może mógłbym komuś w tym pomóc
źródło
W moim przypadku problem pojawił się, gdy naprawiłem błąd analizy statycznej, że wartość zwracana metody nie została użyta.
Stary działający kod w mojej Application.java to:
Nowy kod, który spowodował problem, to:
Oczywiście próba z blokiem zasobów zamknie kontekst po uruchomieniu aplikacji, co spowoduje wyjście aplikacji ze statusem 0. To był przypadek, w którym błąd wycieku zasobów zgłoszony przez analizę statyczną snarqube powinien zostać zignorowany.
źródło
W gradle zastąpiłem tę linię w pliku build.gradle.kts wewnątrz bloku zależności
z tym
i działa dobrze.
źródło
Myślę, że prawidłowa odpowiedź brzmiała: Dlaczego aplikacja internetowa Spring Boot zamyka się natychmiast po uruchomieniu?o tym, że starter-tomcat nie jest ustawiany i jeśli jest ustawiony i działa przez IDE, podany zakres powinien być skomentowany. Zakres nie stwarza problemu podczas wykonywania polecenia. Zastanawiam się dlaczego.
W każdym razie dodałem tylko moje dodatkowe przemyślenia.
źródło
Po prostu inna możliwość,
Wymieniłem
z
i zaczęło się bez żadnych problemów
źródło
to działa z butem sprężynowym 2.0.0
zastąpić
z
źródło
W moim przypadku naprawiłem ten problem jak poniżej: -
Najpierw usunąłem (apache)
C:\Users\myuserId\.m2\repository\org\apache
Dodałem poniżej zależności w moim
pom.xml
plikuZmieniłem domyślne gniazdo, dodając poniższe wiersze w pliku zasobów
..\yourprojectfolder\src\main\resourcesand\application.properties
(utworzyłem ten plik ręcznie)w tym celu dodałem poniżej blok w mojej sekcji
pom.xml
poniżej<build>
.Mój ostateczny
pom.xml
plik wygląda jakźródło
Jeśli nie chcesz, aby Twoja wiosna była aplikacją internetową, po prostu dodaj
@EnableAsync
lub@EnableScheduling
do swojego Starteraźródło
w moim przypadku miałem już zależność maven do „spring-boot-starter-web” i projekt zaczynałby się dobrze bez automatycznego zatrzymywania, gdy uruchamiam go jako aplikację springboot z poziomu IDE . Jednak po wdrożeniu go na K8 aplikacja uruchamia się i automatycznie zatrzymuje. Więc zmodyfikowałem moją główną klasę aplikacji, aby rozszerzyć SpringBootServletInitializer i wydaje się, że to naprawiło automatyczne zatrzymywanie.
źródło