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

如果您看过之前的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支持,您的关注是我坚持的动力!

更多本系列免费教程连载点击进入汇总目录


money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑指Offer - 面试题9. 用两个栈实现队列

1. 题目 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 类似题目&#xff1a;LeetCode 232. …

被深度学习框架逼疯的N大瞬间!何解?

文 | 卖萌酱大家好&#xff0c;我是卖萌酱。对一个深度学习从业者来说&#xff0c;无论你的场景是CV、NLP、Speech还是搜广推现金牛&#xff0c;手头使用最高频的工具莫过于深度学习框架&#xff0c;涵盖了模型训练、模型部署&#xff0c;乃至数据标注、数据清洗等环节。站在20…

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

上一节&#xff0c;我们介绍了Spring Boot在JDBC模块中自动化配置使用的默认数据源HikariCP。接下来这一节&#xff0c;我们将介绍另外一个被广泛应用的开源数据源&#xff1a;Druid。 Druid是由阿里巴巴数据库事业部出品的开源项目。它除了是一个高性能数据库连接池之外&…

剑指Offer - 面试题10- I. 斐波那契数列

文章目录1. 题目2. DP解题3. 面试题 08.01. 三步问题4. LeetCode 509. 斐波那契数1. 题目 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F…

关于深度学习框架的忆苦思甜

声明&#xff1a;本文原创首发于公众号夕小瑶的卖萌屋。作者&#xff1a;卖萌酱大家好&#xff0c;我是卖萌酱。对一个深度学习从业者来说&#xff0c;无论你的场景是CV、NLP、Speech还是搜广推现金牛&#xff0c;手头使用最高频的工具莫过于深度学习框架&#xff0c;涵盖了模型…

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

通过上一节的学习&#xff0c;我们已经学会如何应用Spring中的JdbcTemplate来完成对MySQL的数据库读写操作。接下来通过本篇文章&#xff0c;重点说说在访问数据库过程中的一个重要概念&#xff1a;数据源&#xff08;Data Source&#xff09;&#xff0c;以及Spring Boot中对数…

关于深度学习、NLP和CV,我们写了一本1400页的全栈手册

不知不觉写文章已经四年了。最开始是一个人&#xff0c;后来恰了恰饭&#xff0c;就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。三年以来&#xff0c;我跟小伙伴们原创的300篇深度学习、NLP、CV、知识图谱、跨模态等领域的入门资料、子方向综述、201…

基于sklearn的LogisticRegression二分类实践

文章目录1. 预备知识2. 实践代码3. 结果对比3.1 正态分布3.2 均匀分布3.3 修改Pipeline3.3.1 删除多项式转换3.3.2 删除归一化项3.3.3 删除多项式转换&归一化3.4 总结4. 附4.1 matplotlib.pyplot.contourf4.2 numpy 之 np.r_[a,b], np.c_[a,b]本文使用 sklearn的逻辑斯谛回…

Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持

之前 Spring Boot 2.2没能按时发布&#xff0c;是由于 Spring Framework 5.2 的发布受阻而推迟。这次随着 Spring Framework 5.2.0 成功发布之后&#xff0c;Spring Boot 2.2 也紧跟其后&#xff0c;发布了第一个版本&#xff1a;2.2.0。下面就来一起来看看这个版本都更新了些什…

剑指Offer - 面试题10- II. 青蛙跳台阶问题

1. 题目 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97&#xff08;1000000007&#xff09;&#xff0c;如计算初始结果为&#xff1a;1000000008&#xff0c;请返回 1。 示例 1&#xff1a…

Gitee倒下了

你好呀&#xff0c;我是歪歪。昨日&#xff0c;趁着午休的美好时光&#xff0c;我正在互联网上愉&#xff08;疯&#xff09;快&#xff08;狂&#xff09;的冲&#xff08;内&#xff09;浪&#xff08;卷&#xff09;。在查询某个技术点的时候&#xff0c;我一不小心&#xf…

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

之前通过Spring Boot 2.x基础教程&#xff1a;使用Swagger2构建强大的API文档一文&#xff0c;我们学习了如何使用Swagger为Spring Boot项目自动生成API文档&#xff0c;有不少用户留言问了关于文档内容的组织以及排序问题。所以&#xff0c;就特别开一篇详细说说Swagger中文档…

剑指Offer - 面试题15. 二进制中1的个数(位运算)

1. 题目 请实现一个函数&#xff0c;输入一个整数&#xff0c;输出该数二进制表示中 1 的个数。例如&#xff0c;把 9 表示成二进制是 1001&#xff0c;有 2 位是 1。因此&#xff0c;如果输入 9&#xff0c;则该函数输出 2。 示例 1&#xff1a; 输入&#xff1a;0000000000…

阿里副总裁、达摩院副院长金榕被曝离职!AI科学家集体“逃离“大厂…

文 | 江南教主据Tech星球报道&#xff0c;阿里巴巴副总裁、达摩院副院长金榕已于近期离职&#xff0c;去向还未知。金榕博士毕业于卡耐基梅隆大学&#xff0c;曾是密歇根州立大学终身教授&#xff0c;曾任NIPS、SIGIR等顶级国际学术会议的主席&#xff0c;获得过美国国家科学基…

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

请求参数的校验是很多新手开发非常容易犯错&#xff0c;或存在较多改进点的常见场景。比较常见的问题主要表现在以下几个方面&#xff1a; 仅依靠前端框架解决参数校验&#xff0c;缺失服务端的校验。这种情况常见于需要同时开发前后端的时候&#xff0c;虽然程序的正常使用不…

剑指Offer - 面试题17. 打印从1到最大的n位数

1. 题目 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n 1 输出: [1,2,3,4,5,6,7,8,9]说明&#xff1a; 用返回一个整数列表来代替打印 n 为正整数来源&#xff1a;力扣…

“AI不会凉!” 她要扛起中国AI落地的大旗

文 | 卖萌酱"这不是无脑吹&#xff0c;也不是鸡汤。她让中国AI落地变得切实有解了。"AI泡沫破了吗&#xff1f;AI能落地了吗&#xff1f;AI不是PPT问题吗&#xff1f;AI终究只是梦一场&#xff1f;面对行外的人&#xff0c;每当卖萌酱说起自己是做AI的&#xff0c;都…

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

随着前后端分离架构和微服务架构的流行&#xff0c;我们使用Spring Boot来构建RESTful API项目的场景越来越多。通常我们的一个RESTful API就有可能要服务于多个不同的开发人员或开发团队&#xff1a;IOS开发、Android开发、Web开发甚至其他的后端服务等。为了减少与其他团队平…

剑指Offer - 面试题7. 重建二叉树(递归)

1. 题目 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如&#xff0c;给出前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a;3/ \9 20/ …

郑州大学一女生私自外出染新冠被立案,校方回应:开除!

近日&#xff0c;郑大一女生私自外出会男友&#xff0c;室友替做核酸&#xff0c;感染新冠被立案一事引发大众关注。5月19日&#xff0c;郑州大学一工作人员回应此事称&#xff0c;该私自外出女生已经被自动开除&#xff0c;对室友的处罚要等警方进一步的调查结果&#xff0c;“…