关闭ApplicationContext仍无法关闭springboot应用程序

我有一个启动Tomcat的spring-boot应用程序。

我想在应用程序完成操作后关闭它。

我正在遵循此blog将其关闭。

它打印日志Spring Container is destroyed!,但是我仍然必须按IntelliJ中的停止按钮来停止它。

这里是@SpringBootApplication

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

    @Autowired
    MyService myService;

    @Autowired
    private ApplicationContext context;


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

    @Override
    public void run(String... args) throws Exception {
        myService.getResult();
        System.out.println("-------> 1");
        ((ConfigurableApplicationContext)context).close();
    }
}

日志:

2019-11-06 00:51:57.018  INFO 26820 --- [           main] c.m.f.MyApplication  : Starting MyApplication on FTYUIN000171 with PID 26820 
2019-11-06 00:51:57.026  INFO 26820 --- [           main] c.m.f.MyApplication  : No active profile set,falling back to default profiles: default
2019-11-06 00:52:00.423  INFO 26820 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.hateoas.config.HateoasConfiguration' of type [org.springframework.hateoas.config.HateoasConfiguration$$EnhancerBySpringCGLIB$$74fff90c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-11-06 00:52:02.282  INFO 26820 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9090 (http)
2019-11-06 00:52:02.358  INFO 26820 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-11-06 00:52:02.359  INFO 26820 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.22]
2019-11-06 00:52:02.796  INFO 26820 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-11-06 00:52:02.796  INFO 26820 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 5304 ms
2019-11-06 00:52:08.093  INFO 26820 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-11-06 00:52:09.999  INFO 26820 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path ''
2019-11-06 00:52:10.010  INFO 26820 --- [           main] c.m.f.MyApplication  : Started MyApplication in 14.216 seconds (JVM running for 42.337)
-------> 1
2019-11-06 00:53:31.833  INFO 26820 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
Spring Container is destroyed!

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>            
    </dependency>               
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20090211</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.4</version>
    </dependency>               
    <dependency>
        <groupId>com.fasterxml.uuid</groupId>
        <artifactId>java-uuid-generator</artifactId>
        <version>3.1.4</version>
    </dependency>   
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.9</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>7.1.0</version>
    </dependency>               
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.1.0</version>
    </dependency>   
</dependencies>
linda881633 回答:关闭ApplicationContext仍无法关闭springboot应用程序

默认情况下,Spring Boot将Web应用程序部署到嵌入式Tomcat。因此,当您启动Spring Boot应用程序时,将启动Tomcat,并且将部署您的Web应用程序。当您关闭Spring上下文时,只有您的Web应用程序停止了,Tomcat仍在运行(线程也正在运行)。

因此,您应该使用System.exit(0);

完全杀死您的应用
本文链接:https://www.f2er.com/3156850.html

大家都在问