Запустите метод после запуска сервера Tomcat - PullRequest
0 голосов
/ 26 октября 2018

Мне нужно запустить / запустить метод (3 метода объявлены внутри класса) только после запуска и запуска Tomcat Server.Я просмотрел несколько потоков, предлагающих использовать Servlet s (класс слушателя) в web.xml.Проблема в моем классе, который реализует ServletContextListene r даже до завершения загрузки Tomcat Server.

Примечание. Мой web.xml уже помечен сервлетом-диспетчером, который ищет какие-либо вызовы API REST.

Пример (Ниже приведено несколько журналов, которые помогут вам понять больше):

INFO: No Spring WebApplicationInitializer types detected on classpath
Oct 26, 2018 6:20:43 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext   
.
{{ Connect with MYSQL }} 
.
Oct 26, 2018 6:20:50 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'dispatcher'
.
18:20:51.394 [localhost-startStop-1] INFO  o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/user/someMethod],methods=[POST],produces=[application/xml || application/json]}" onto public java.util.ArrayList<com.x.y.z.User> com.z.y.controllers.UserController.deleteUser(com.x.y.z.User)
    18:20:52.090 [localhost-startStop-1] INFO  o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet': startup date [Fri Oct 26 18:20:50 IST 2018]; parent: Root WebApplicationContext
    18:20:52.181 [localhost-startStop-1] INFO  o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet': startup date [Fri Oct 26 18:20:50 IST 2018]; parent: Root WebApplicationContext
    18:20:52.394 [localhost-startStop-1] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcher': initialization completed in 2041 ms
    Oct 26, 2018 6:20:52 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-bio-8081"]
    Oct 26, 2018 6:20:52 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["ajp-bio-8010"]
    Oct 26, 2018 6:20:52 PM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 27236 ms

{{ I want to call methods after Tomcat starts }}

Когда я инициализирую класс в ServletContextListener, показывается следующий журнал.

INFO: No Spring WebApplicationInitializer types detected on classpath
Oct 26, 2018 6:22:09 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
.
.
{{ Connect with MYSQL }}
.
18:22:16.461 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO  o.s.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 6635 ms
**MyClass - myFileWatcher()
The above thread has started**
.
.

Поскольку в моем методе есть поток, он застревает даже до полного запуска Tomcat (поток должен запускаться только тогда, когда отображается ИНФОРМАЦИЯ: Запуск сервера через 27236 мс ').

Примечание: дайте мне знать, если я что-то пропустил.

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете написать @Bean, который обеспечивает CommandLineRunner. Нечто подобное :

@Bean
public CommandLineRunner commandLineRunner(SomeAppService someAppService) {
    return strings -> {
        // do something with someAppService
        // this code will run just after the application has fully started
    };
}

Есть и другие способы сделать это. Вы можете прочитать некоторые связанные статьи здесь:

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