[SPRING] 스프링 부트 애플리케이션을 프로그래밍 방식으로 종료
SPRING스프링 부트 애플리케이션을 프로그래밍 방식으로 종료
VM을 종료하지 않고 스프링 부트 애플리케이션을 프로그래밍 방식으로 종료하려면 어떻게해야합니까?
다른 작품에서는, 그 반대는 무엇입니까?
new SpringApplication(Main.class).run(args);
해결법
-
==============================
1.SpringApplication을 닫는 것은 기본적으로 기본 ApplicationContext를 닫음을 의미한다. SpringApplication # run (String ...) 메소드는 ApplicationContext를 ConfigurableApplicationContext로 제공한다. 그런 다음 자신을 닫을 수 있습니다. 예를 들어,
SpringApplication을 닫는 것은 기본적으로 기본 ApplicationContext를 닫음을 의미한다. SpringApplication # run (String ...) 메소드는 ApplicationContext를 ConfigurableApplicationContext로 제공한다. 그런 다음 자신을 닫을 수 있습니다. 예를 들어,
@SpringBootApplication public class Example { public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(Example.class, args); // ...determine it's time to shut down... ctx.close(); } }
또는 정적 SpringApplication.exit (ApplicationContext, ExitCodeGenerator ...) 도우미 메서드를 사용하여 대신 수행 할 수 있습니다. 예를 들어,
@SpringBootApplication public class Example { public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(Example.class, args); // ...determine it's time to stop... int exitCode = SpringApplication.exit(ctx, new ExitCodeGenerator() { @Override public int getExitCode() { // no errors return 0; } }); System.exit(exitCode); } }
-
==============================
2.스프링 부트 응용 프로그램에서는 다음과 같은 것을 사용할 수 있습니다.
스프링 부트 응용 프로그램에서는 다음과 같은 것을 사용할 수 있습니다.
ShutdownManager.java
import org.springframework.context.ApplicationContext; import org.springframework.boot.SpringApplication; @Component class ShutdownManager{ @Autowired private ApplicationContext appContext; public void initiateShutdown(int returnCode){ SpringApplication.exit(appContext, () -> returnCode); } }
-
==============================
3.이 작품은 심지어 완료 인쇄됩니다.
이 작품은 심지어 완료 인쇄됩니다.
SpringApplication.run(MyApplication.class, args).close(); System.out.println("done");
그래서 run () 후에 .close ()
설명:
과:
기본적으로 부모 컨텍스트를 닫지 않으므로 VM이 종료되지 않습니다.
-
==============================
4.응용 프로그램에서 SpringApplication을 사용할 수 있습니다. 여기에는 두 개의 인수 (ApplicationContext 및 ExitCodeGenerator)를 사용하는 정적 exit () 메소드가 있습니다.
응용 프로그램에서 SpringApplication을 사용할 수 있습니다. 여기에는 두 개의 인수 (ApplicationContext 및 ExitCodeGenerator)를 사용하는 정적 exit () 메소드가 있습니다.
즉,이 메소드를 선언 할 수 있습니다.
@Autowired public void shutDown(ExecutorServiceExitCodeGenerator exitCodeGenerator) { SpringApplication.exit(applicationContext, exitCodeGenerator); }
통합 테스트에서는 클래스 수준에서 @DirtiesContext 주석을 추가하여 구현할 수 있습니다.
즉
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = {Application.class}, webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT, properties = {"server.port:0"}) @DirtiesContext(classMode= DirtiesContext.ClassMode.AFTER_CLASS) public class ApplicationIT { ...
from https://stackoverflow.com/questions/22944144/programmatically-shut-down-spring-boot-application by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @ResponseBody를 사용하여 Spring Controller에서 JSON 데이터를 반환하는 방법 (0) | 2018.12.08 |
---|---|
[SPRING] 스프링 부트를 가져 와서 데이터베이스 스키마를 자동으로 만들 수 없습니다. (0) | 2018.12.08 |
[SPRING] START_OBJECT 토큰에서 java.util.ArrayList의 인스턴스를 deserialize 할 수 없습니다. (0) | 2018.12.08 |
[SPRING] AngularJS html5Mode로 봄 부팅 (0) | 2018.12.08 |
[SPRING] 일치하는 와일드 카드는 엄격하지만 요소의 컨텍스트에 대한 선언을 찾을 수 없습니다. component-scan (0) | 2018.12.08 |