点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

作者 | 翟永超

来源 | http://blog.didispace.com/spring-boot-learning-21-2-6/

如果您看过之前的Spring Boot 1.x教程,或者自己原本就对Spring Boot有一些经验,或者对Spring MVC很熟悉。那么对于Spring构建的Web应用在启动的时候,都会输出当前应用创建的HTTP接口列表。

比如下面的这段日志:

2020-02-11 15:32:39.293  INFO 48395 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2020-02-11 15:32:39.482  INFO 48395 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@7ff95560: startup date [Tue Feb 11 15:32:37 CST 2020]; root of context hierarchy
2020-02-11 15:32:39.568  INFO 48395 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/{id}],methods=[GET]}" onto public com.didispace.chapter26.User com.didispace.chapter26.UserController.getUser(java.lang.Long)
2020-02-11 15:32:39.569  INFO 48395 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/{id}],methods=[PUT]}" onto public java.lang.String com.didispace.chapter26.UserController.putUser(java.lang.Long,com.didispace.chapter26.User)
2020-02-11 15:32:39.570  INFO 48395 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/],methods=[GET]}" onto public java.util.List<com.didispace.chapter26.User> com.didispace.chapter26.UserController.getUserList()
2020-02-11 15:32:39.570  INFO 48395 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/],methods=[POST]}" onto public java.lang.String com.didispace.chapter26.UserController.postUser(com.didispace.chapter26.User)
2020-02-11 15:32:39.570  INFO 48395 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/{id}],methods=[DELETE]}" onto public java.lang.String com.didispace.chapter26.UserController.deleteUser(java.lang.Long)
2020-02-11 15:32:39.573  INFO 48395 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2020-02-11 15:32:39.573  INFO 48395 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2020-02-11 15:32:39.590  INFO 48395 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2020-02-11 15:32:39.590  INFO 48395 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

这些日志接口信息是由org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping类在启动的时候,通过扫描Spring MVC的@Controller@RequestMapping等注解去发现应用提供的所有接口信息。然后在日志中打印,以方便开发者排查关于接口相关的启动是否正确。

但是,足够仔细的开发者可能已经发现,从Spring Boot 2.1.0版本开始,就不再打印这些信息了,完整的启动日志变的非常少,以Spring Boot 2.x基础教程:构建RESTful API与单元测试一文的例子为例,可以看到输入内容如下:

2020-02-11 15:34:15.280  INFO 48784 --- [main] c.d.chapter26.Chapter26Application       : Starting Chapter26Application on zhaiyongchaodeMacBook-Pro.local with PID 48784 (/Users/zhaiyongchao/Documents/git/github/SpringBoot-Learning/2.1.x/chapter2-6/target/classes started by zhaiyongchao in /Users/zhaiyongchao/Documents/git/github/SpringBoot-Learning/2.1.x)
2020-02-11 15:34:15.283  INFO 48784 --- [main] c.d.chapter26.Chapter26Application       : No active profile set, falling back to default profiles: default
2020-02-11 15:34:16.556  INFO 48784 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-02-11 15:34:16.587  INFO 48784 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-02-11 15:34:16.588  INFO 48784 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.16]
2020-02-11 15:34:16.596  INFO 48784 --- [main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/zhaiyongchao/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2020-02-11 15:34:16.702  INFO 48784 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-02-11 15:34:16.702  INFO 48784 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1377 ms
2020-02-11 15:34:16.954  INFO 48784 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-02-11 15:34:17.187  INFO 48784 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-02-11 15:34:17.192  INFO 48784 --- [main] c.d.chapter26.Chapter26Application       : Started Chapter26Application in 2.238 seconds (JVM running for 2.764)

找回日志中请求路径列表

为什么在Spring Boot 2.1.x版本中不再打印请求路径列表呢?

主要是由于从该版本开始,将这些日志的打印级别做了调整:从原来的INFO调整为TRACE。所以,当我们希望在应用启动的时候打印这些信息的话,只需要在配置文件增增加对RequestMappingHandlerMapping类的打印级别设置即可,比如在application.properties中增加下面这行配置:

logging.level.org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=trace

在增加了上面的配置之后重启应用,便可以看到如下的日志打印:

2020-02-11 15:36:09.787 TRACE 49215 --- [main] s.w.s.m.m.a.RequestMappingHandlerMapping : c.d.c.UserController:{PUT /users/{id}}: putUser(Long,User){GET /users/{id}}: getUser(Long){POST /users/}: postUser(User){GET /users/}: getUserList(){DELETE /users/{id}}: deleteUser(Long)
2020-02-11 15:36:09.791 TRACE 49215 --- [main] s.w.s.m.m.a.RequestMappingHandlerMapping : o.s.b.a.w.s.e.BasicErrorController:{ /error}: error(HttpServletRequest){ /error, produces [text/html]}: errorHtml(HttpServletRequest,HttpServletResponse)
2020-02-11 15:36:09.793 DEBUG 49215 --- [main] s.w.s.m.m.a.RequestMappingHandlerMapping : 7 mappings in 'requestMappingHandlerMapping'

可以看到在2.1.x版本之后,除了调整了日志级别之外,对于打印内容也做了调整。现在的打印内容根据接口创建的Controller类做了分类打印,这样更有助于开发者根据自己编写的Controller来查找初始化了那些HTTP接口。

代码示例

本文的完整工程可以查看下面仓库中的chapter2-6目录:

  • Github:https://github.com/dyc87112/SpringBoot-Learning/

  • Gitee:https://gitee.com/didispace/SpringBoot-Learning/

如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!

本文通过OpenWrite的Markdown转换工具发布

关注我,回复“加群”加入各种主题讨论群

2.x版本往期连载

快速入门

Spring Boot 2.x:版本关系

Spring Boot 2.x:快速入门

Spring Boot 2.x:工程结构推荐

Spring Boot 2.x:配置文件详解

Web开发

Spring Boot 2.x:构建RESTful API与单元测试

Spring Boot 2.x:使用Swagger2构建强大的API文档

Spring Boot 2.x:JSR-303实现请求参数校验

Spring Boot 2.x:Swagger接口分类与各元素排序问题详解

Spring Boot 2.x:Swagger静态API文档的生成

数据访问

Spring Boot 2.x:使用JdbcTemplate访问MySQL数据库

Spring Boot 2.x:默认数据源Hikari的配置详解

Spring Boot 2.x:使用国产数据库连接池Druid

Spring Boot 2.1之后如何在启动日志中打印请求路径列表相关推荐

  1. Spring Boot 2.x基础教程:找回启动日志中的请求路径列表

    如果您看过之前的Spring Boot 1.x教程,或者自己原本就对Spring Boot有一些经验,或者对Spring MVC很熟悉.那么对于Spring构建的Web应用在启动的时候,都会输出当前应 ...

  2. Spring Boot(号称Java当前最流行的开发框架) 中启动HTTPS

    Spring Boot(号称Java当前最流行的开发框架) 中启动HTTPS 说实话啊,这个框架是比较简单,但是数据库操作还是那么恶心,好比16岁的花姑娘配了一个80岁的老头,关于这一块,我会单独发布 ...

  3. spring boot所打的jar在服务器启动时,日志打印时间、jar所使用时间和系统当前时间不一致

    1.spring boot所打的jar在服务器启动时,日志打印时间.jar所使用时间和系统当前时间不一致 1)系统时间 2)日志打印时间 2.解决方法 在启动的时间添加-Duser.timezone= ...

  4. 解决spring boot logging在两个目录生成日志文件且max-history不生效

    解决spring boot logging在两个目录生成日志文件且max-history不生效 文章目录 解决spring boot logging在两个目录生成日志文件且max-history不生效 ...

  5. 【Bug档案01】Spring Boot的控制器+thymeleaf模板 -使用中出现静态资源加载路径不当的问题 -解决时间:3h

    [Bug档案01]Spring Boot的控制器+thymeleaf模板 -使用中出现静态资源加载路径不当的问题 -解决时间:3h 参考文章: (1)[Bug档案01]Spring Boot的控制器+ ...

  6. u-boot启动过程中打印BOOTP broadcast问题解决

    工具:petalinux2018.3: u-boot版本:2018.01 在u-boot启动过程中打印BOOTP broadcast,如下图,非常耗时间. BOOTP是引导程序协议,也称为自举协议,用 ...

  7. Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解

    Spring Boot项目三种启动方式及后台运行详解 1 Spring Boot项目三种启动方法 运行Application.java类中的Main方法 项目管理工具启动 Maven项目:mvn sp ...

  8. 软件架构-Spring boot快速开始及核心功能介绍(中)

    上次通过Spring boot认知,核心功能.springBoot的搭建[官方向导搭建boot应用]和 [maven的方式搭建boot]. 统一父POM管理(一) ① 建立boot-parent工程 ...

  9. Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程...

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

最新文章

  1. VMware记录(一)- vCenter Server 服务安装提示无法解析此完全限定域名
  2. log4j在javaWeb项目中的使用
  3. Python中文分词 jieba 十五分钟入门与进阶
  4. @configurationproperties注解的使用_SpringBoot常用注解的简单理解
  5. arcgis的python接口_arcgis-Python的ArcGIS API-Esri Screenshots
  6. mysql大数据量分页的一些做法
  7. cross-validation:从 holdout validation 到 k-fold validation
  8. 我的MVVM框架 v3教程——todos例子
  9. 《JavaScript高级程序设计2》学习笔记——Ajax与JSON
  10. Lua参数绑定函数实现方法
  11. Java、OC、C/C++中的null
  12. 短文本相似度计算-simHash从原理到实现
  13. R语言笔记:机器学习【K近邻】
  14. 为什么一打电话就显示服务器故障,手机打电话黑屏怎么回事?手机打电话时出现黑屏情况的解决办法介绍...
  15. SAP Exchange Rate 外币汇率的设置
  16. CISCO 基于时间访问控制
  17. burp抓包mumu模拟器
  18. gclient 设置代理问题
  19. PostgreSQL统计表占用空间
  20. Antd Pro V4 样式修改大全(有图有真相)

热门文章

  1. golang 切片copy复制 和 等号复制 区别
  2. golang 简单tls协议 使用实例
  3. golang count 单字符 字符串 统计函数
  4. linux swap 内存交换分区调整
  5. php 框架 laravel 简介
  6. python3 异步 asyncio 动态添加任务
  7. linux centos 查找命令 属于哪个安装包 所属软件包
  8. linux 内核模块 警告 initialization from incompatible pointer type 解决方法
  9. linux socket 缓冲区默认大小
  10. 使用 FRP 反向代理实现 Windows 远程连接