仅在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毫秒内服务器启动”时,线程才应该启动)。
注意:让我知道是否错过了一些事情。
答案 0 :(得分:1)
您可以编写一个@Bean
的CommandLineRunner
。 like this:
@Bean
public CommandLineRunner commandLineRunner(SomeAppService someAppService) {
return strings -> {
// do something with someAppService
// this code will run just after the application has fully started
};
}
还有其他方法可以做到这一点。您可以在此处阅读一些相关文章: