[SPRING] 어떻게 봄 부팅 데몬 / 서버 응용 프로그램이 즉시 종료 / 종료되지 않도록하려면?
SPRING어떻게 봄 부팅 데몬 / 서버 응용 프로그램이 즉시 종료 / 종료되지 않도록하려면?
내 스프링 부팅 응용 프로그램은 웹 서버가 아니지만 사용자 지정 프로토콜을 사용하는 서버입니다 (이 경우 Camel을 사용).
하지만 Spring Boot는 시작한 후 (정상적으로) 멈 춥니 다. 어떻게 이것을 막을 수 있습니까?
Ctrl + C 또는 프로그래밍 방식으로 앱을 중지하고 싶습니다.
@CompileStatic
@Configuration
class CamelConfig {
@Bean
CamelContextFactoryBean camelContext() {
final camelContextFactory = new CamelContextFactoryBean()
camelContextFactory.id = 'camelContext'
camelContextFactory
}
}
해결법
-
==============================
1.Apache Camel 2.17부터는 더 깨끗한 답이 있습니다. http://camel.apache.org/spring-boot.html을 인용하십시오.
Apache Camel 2.17부터는 더 깨끗한 답이 있습니다. http://camel.apache.org/spring-boot.html을 인용하십시오.
당신은 다음과 같은 의존성을 원할 것입니다 :
<의존성>
org.apache.camel groupId> 낙타 스프링 부트 시동기 artifactId> 2.17.0 version> dependency> 명확하게
2.17.0 version>을 대체하거나 낙타 BOM을 사용하여 일관성을 위해 종속성 관리 정보를 가져옵니다. -
==============================
2.org.springframework.boot.CommandLineRunner + Thread.currentThread (). join ()을 사용하여 해결책을 찾았습니다. 예 : (참고 : 아래 코드는 Java가 아닌 Groovy에 있습니다.)
org.springframework.boot.CommandLineRunner + Thread.currentThread (). join ()을 사용하여 해결책을 찾았습니다. 예 : (참고 : 아래 코드는 Java가 아닌 Groovy에 있습니다.)
package id.ac.itb.lumen.social import org.slf4j.LoggerFactory import org.springframework.boot.CommandLineRunner import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication @SpringBootApplication class LumenSocialApplication implements CommandLineRunner { private static final log = LoggerFactory.getLogger(LumenSocialApplication.class) static void main(String[] args) { SpringApplication.run LumenSocialApplication, args } @Override void run(String... args) throws Exception { log.info('Joining thread, you can press Ctrl+C to shutdown application') Thread.currentThread().join() } }
-
==============================
3.CountDownLatch를 사용한 예제 구현 :
CountDownLatch를 사용한 예제 구현 :
@Bean public CountDownLatch closeLatch() { return new CountDownLatch(1); } public static void main(String... args) throws InterruptedException { ApplicationContext ctx = SpringApplication.run(MyApp.class, args); final CountDownLatch closeLatch = ctx.getBean(CountDownLatch.class); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { closeLatch.countDown(); } }); closeLatch.await(); }
이제 응용 프로그램을 중지하려면 프로세스 ID를 검색하고 콘솔에서 kill 명령을 실행하십시오.
kill <PID>
-
==============================
4.Spring Boot는 응용 프로그램이 실행되는 작업을 응용 프로그램이 구현 된 프로토콜에 맡깁니다. 예를 들어이 가이드를 참조하십시오.
Spring Boot는 응용 프로그램이 실행되는 작업을 응용 프로그램이 구현 된 프로토콜에 맡깁니다. 예를 들어이 가이드를 참조하십시오.
예를 들어, Camel 서비스를 실행하는 방법은 Camel을 기본 Spring Boot 응용 프로그램 클래스에서 독립 실행 형 응용 프로그램으로 실행하는 것입니다.
-
==============================
5.내 프로젝트는 NON WEB Spring Boot입니다. 내 우아한 솔루션 CommandLineRunner에 의해 데몬 스레드를 만드는 것입니다. 그런 다음 응용 프로그램이 즉시 종료되지 않습니다.
내 프로젝트는 NON WEB Spring Boot입니다. 내 우아한 솔루션 CommandLineRunner에 의해 데몬 스레드를 만드는 것입니다. 그런 다음 응용 프로그램이 즉시 종료되지 않습니다.
@Bean public CommandLineRunner deQueue() { return args -> { Thread daemonThread; consumer.connect(3); daemonThread = new Thread(() -> {`enter code here` try { consumer.work(); } catch (InterruptedException e) { logger.info("daemon thread is interrupted", e); } }); daemonThread.setDaemon(true); daemonThread.start(); }; }
-
==============================
6.웹 응용 프로그램을 배포하지 않을 때 Java 프로세스를 유지하려면 webEnvironment 속성을 false로 설정합니다.
웹 응용 프로그램을 배포하지 않을 때 Java 프로세스를 유지하려면 webEnvironment 속성을 false로 설정합니다.
SpringApplication sa = new SpringApplication(); sa.setWebEnvironment(false); //important ApplicationContext ctx = sa.run(ApplicationMain.class, args);
-
==============================
7.스프링 부팅 응용 프로그램을 계속 실행하려면 컨테이너에서 실행해야합니다. 그렇지 않으면 모든 Java 응용 프로그램과 마찬가지로 모든 스레드가 완료됩니다. 추가 할 수 있습니다.
스프링 부팅 응용 프로그램을 계속 실행하려면 컨테이너에서 실행해야합니다. 그렇지 않으면 모든 Java 응용 프로그램과 마찬가지로 모든 스레드가 완료됩니다. 추가 할 수 있습니다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
그리고 그것은 webapp로 바꿀 것입니다, 그렇지 않다면 당신은 당신의 구현에서 그것을 유지할 책임이 있습니다
from https://stackoverflow.com/questions/28017784/how-to-prevent-spring-boot-daemon-server-application-from-closing-shutting-down by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring websocket stomp 서버에서 클라이언트 세션 연결 해제 (0) | 2019.02.07 |
---|---|
[SPRING] Morphia, Mongo4j 및 MongoDB의 Spring 데이터는 어떻게 비교됩니까? [닫은] (0) | 2019.02.07 |
[SPRING] Spring / EJB / Mockito ... 프록시에서 내부 호출을 처리하는 방법? (0) | 2019.02.07 |
[SPRING] "Spring NamespaceHandler를 찾을 수 없습니다"오류 (0) | 2019.02.07 |
[SPRING] Spring Restful Jax-RS 주석 지원 (0) | 2019.02.07 |