如何在Spring Boot中调试MVC Controller URL映射?

时间:2018-04-14 01:38:45

标签: spring-mvc tomcat spring-boot

我有一个Spring Boot应用程序运行Kafka和JPA。我想添加一个管理页面&所以首先添加" spring-boot-starter-web"并添加Controller类。但是,当我启动我的应用程序时,我可以看到Tomcat服务器已启动并且dispatcherServlet已初始化。

2018-04-13 18:25:29.495  INFO 5512 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$f5f4a697] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2018-04-13 18:25:30.584  INFO 5512 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2018-04-13 18:25:30.604  INFO 5512 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-04-13 18:25:30.607  INFO 5512 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.27
2018-04-13 18:25:33.052  INFO 5512 --- [ost-startStop-1] org.apache.jasper.servlet.TldScanner     : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded
JARs during scanning can improve startup time and JSP compilation time.
2018-04-13 18:25:33.384  INFO 5512 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-04-13 18:25:33.384 DEBUG 5512 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Published root WebApplicationContext as ServletContext attribute with name [org.springframework.web.context.WebApplicationContext.ROOT] 
2018-04-13 18:25:33.385  INFO 5512 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization comp
leted in 6776 ms
2018-04-13 18:25:33.761  INFO 5512 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2018-04-13 18:25:33.768  INFO 5512 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'metricsFilter' to: [/*]

但是我看不到Controller类被handlerMapping映射。调用http://localhost:8080只会给我一个服务器不可用的错误。

我该如何调试?我已经检查了以下内容:

  1. Controller类位于主Application.java的子文件夹中 文件。
  2. Controller具有@Controller注释。该软件包中的其他@Components正在自动装配,因此我确信该文件夹是 扫描。
  3. 我在主类中扩展了SpringBootServletInitializer类。
  4. 主类中有以下注释 - @ SpringBootApplication @Import(PersistenceConfig.class),@ EnableKafka,@ EnableCaching,@ EnableWebMvc, @EnableAutoConfiguration(exclude = {KafkaAutoConfiguration.class}) 这里PersistenceConfig是我自己的类。
  5. 有没有办法找出MVC没有将Controller类添加到URL映射的原因?

    我不能共享代码,因为它不公开。感谢您对此进行调查。

2 个答案:

答案 0 :(得分:1)

  

有没有办法找出MVC没有将Controller类添加到URL映射的原因?

总是很难找出为什么正在发生的事情(除非它阻止启动),但是Tomcat中的一个配置项可能会派上用场调试这个问题:

设置logEffectiveWebXml="true" on your context并在日志中查看有效的web.xml - 从那里您应该能够识别处理的网址是否有线,或者是否过载或以其他方式被抢占。

答案 1 :(得分:1)

此问题已解决。我发现我无法访问Actuator或任何映射的URL。我一直看到一个"页面不可用"来自浏览器的错误(不是404)。

这是因为ApplicationContext仍在加载。应用程序上下文正在等待bean初始化,这需要很长时间才能从数据库加载hashmap。因此,上下文尚未准备好为映射的URL提供请求。

我在日志中看到Tomcat服务器启动消息时感到困惑。那只是服务器。当我访问URL时,Web应用程序上下文没有准备好。

删除慢速bean后,我可以访问这些URL。感谢所有的投入。