springboot 启动后,第一次的接口请求总是很慢,后面速度就很快,怎么解决?

2019-11-19 14:07:59 +08:00
 shayang888
[ctor-http-nio-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
[ctor-http-nio-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

启动的时候看了下,并没有这段日志,第一次请求接口的时候,访问了数据库然后就出现了这个,再次请求的时候也没有再出现了。

现在问题就是第一次请求的时候因为这个造成速度特别慢,有啥办法可以解决吗

14388 次点击
所在节点    Java
33 条回复
shayang888
2019-11-19 17:04:49 +08:00
@chendy
2019-11-19 17:02:31.814 DEBUG 53080 --- [ctor-http-nio-3] o.s.w.s.adapter.HttpWebHandlerAdapter : [17aa98db] HTTP GET "/test"
2019-11-19 17:02:31.839 DEBUG 53080 --- [ctor-http-nio-3] s.w.r.r.m.a.RequestMappingHandlerMapping : [17aa98db] Mapped to com.example.demo.DemoApplication#test()
2019-11-19 17:02:31.856 DEBUG 53080 --- [ctor-http-nio-3] o.s.w.r.r.m.a.ResponseBodyResultHandler : Using 'text/plain;charset=UTF-8' given [*/*] and supported [text/plain;charset=UTF-8, text/event-stream, text/plain;charset=UTF-8, */*]
2019-11-19 17:02:31.857 DEBUG 53080 --- [ctor-http-nio-3] o.s.w.r.r.m.a.ResponseBodyResultHandler : [17aa98db] 0..1 [java.lang.String]
2019-11-19 17:02:31.860 DEBUG 53080 --- [ctor-http-nio-3] o.s.core.codec.CharSequenceEncoder : [17aa98db] Writing "test"
2019-11-19 17:02:31.877 DEBUG 53080 --- [ctor-http-nio-3] o.s.w.s.adapter.HttpWebHandlerAdapter : [17aa98db] Completed 200 OK
--------------------------------------------------------------
2019-11-19 17:02:33.311 DEBUG 53080 --- [ctor-http-nio-3] o.s.w.s.adapter.HttpWebHandlerAdapter : [17aa98db] HTTP GET "/test"
2019-11-19 17:02:33.312 DEBUG 53080 --- [ctor-http-nio-3] s.w.r.r.m.a.RequestMappingHandlerMapping : [17aa98db] Mapped to com.example.demo.DemoApplication#test()
2019-11-19 17:02:33.312 DEBUG 53080 --- [ctor-http-nio-3] o.s.w.r.r.m.a.ResponseBodyResultHandler : Using 'text/plain;charset=UTF-8' given [*/*] and supported [text/plain;charset=UTF-8, text/event-stream, text/plain;charset=UTF-8, */*]
2019-11-19 17:02:33.312 DEBUG 53080 --- [ctor-http-nio-3] o.s.w.r.r.m.a.ResponseBodyResultHandler : [17aa98db] 0..1 [java.lang.String]
2019-11-19 17:02:33.312 DEBUG 53080 --- [ctor-http-nio-3] o.s.core.codec.CharSequenceEncoder : [17aa98db] Writing "test"
2019-11-19 17:02:33.315 DEBUG 53080 --- [ctor-http-nio-3] o.s.w.s.adapter.HttpWebHandlerAdapter : [17aa98db] Completed 200 OK

2 次的时间明显不一样,第一次花了 60 多 ms,第二次直接 3ms 就完成了
shayang888
2019-11-19 17:05:48 +08:00
@wysnylc
@johnniang
你们都没遇到过这种情况吗?
wysnylc
2019-11-19 17:08:16 +08:00
@shayang888 #22 你这就是 lazy 懒加载导致的,没别的的可能
shayang888
2019-11-19 17:16:00 +08:00
@wysnylc 那请问怎么解决呢
arraysnow
2019-11-19 17:20:45 +08:00
@shayang888 11 楼告诉你了
wysnylc
2019-11-19 17:25:28 +08:00
@shayang888 #24 熵池问题:https://blog.csdn.net/wysnxzm/article/details/98482143
spring 第一次访问慢问题:https://www.cnblogs.com/haitao-fan/p/10319920.html
数据库的你自己找配置属性吧我忘了,上面的同学已经给你点名了问题,希望你学会用百度
chendy
2019-11-19 17:52:52 +08:00
几十毫秒的差距而已…
并发请求的话你会看到很多个几十毫秒,应该是 tomcat 内部的一些预热逻辑
自己预热 /无视 即可
luopengfei14
2019-11-19 19:54:33 +08:00
在 @postconstructs 注解,
在该注解的方法中发起一次数据库查询。
这样等 springboot 启动完后,数据库连接池已经建立好了。
之前我们项目是在这个方法获取动态的项目配置数据。
Caballarii
2019-11-19 20:17:22 +08:00
搞半天搞 1,2,说不定直接动 3 就好了
vjnjc
2019-11-20 00:34:43 +08:00
@chendy #11 的第三点给错了吧,原贴#3 的真随机数是 /dev/random。/dev/urandom 更快但是更假。
shitcode
2020-04-07 20:21:24 +08:00
urandom 试了没卵用,启动时预热有效果。
Ahy
2020-05-19 14:35:47 +08:00
hello 最后怎么解决的呢? 有什么解决方案么?
Ahy
2020-05-19 14:36:08 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/621019

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX