Закрытие ApplicationContext по-прежнему не закрывает приложение Springboot - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть приложение с весенней загрузкой, где я запускаю Tomcat.

Я хочу закрыть приложение, когда оно завершит свою работу.

Я слежу за этим 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>

1 Ответ

0 голосов
/ 06 ноября 2019

По умолчанию Spring boot развертывает веб-приложение на встроенном Tomcat. Поэтому, когда вы запустите загрузочное приложение Spring, Tomcat будет запущен, и ваше веб-приложение будет развернуто. Когда вы закрываете контекст Spring, останавливается только ваше веб-приложение, Tomcat все еще работает (поток, если таковой имеется, также работает).

Итак, вам нужно полностью убить ваше приложение с помощью System.exit(0);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...