Tomcat服务器启动后运行方法

时间:2018-10-26 13:23:10

标签: java spring multithreading tomcat

仅在Tomcat Server启动并运行后,我才需要启动/运行方法(在类中声明了3个方法)。我遍历了多个线程,建议在Servlet中使用web.xml s(侦听器类)。问题是我的类实现了ServletContextListene r甚至在加载Tomcat Server之前完成运行。

注意:我的web.xml已被标记到调度程序servlet,以查找任何REST API调用。

Ex(以下几条日志可帮助您了解更多信息):

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完全启动之前就被卡住了(只有在显示“ INFO:27236毫秒内服务器启动”时,线程才应该启动)。

注意:让我知道是否错过了一些事情。

1 个答案:

答案 0 :(得分:1)

您可以编写一个@BeanCommandLineRunnerlike this

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

还有其他方法可以做到这一点。您可以在此处阅读一些相关文章: