记一次Calendar引起的bug,导致数据库连接达到最大
再一次调接口的过程中,发现后台有大量的数据库异常,报的错误是被加入mysql 异常hosts,需要使用命令flush-hosts清空。我看了一下我的后台有大量的数据量连接异常信息。花了很大的例如追踪,发现是因为Calendar解析时间段引起的。示例代码如下,
我通过requet拿到时间段的起始时间和终止时间,然后使用循环,把时间解析处理。例如begin_day="2019-10-17",end_day="2019-10-24"。那么解析出来的days就是8。我拿到时间段后,会去开启8个线程,每隔线程去数据库查询该天的数据。然后最后在主线程做一次汇总排序。代码一直运行的很好。直到这次bug出来。
前端的小伙伴换了前端的日历控件,传给我后台的时间有“年 月 日”格式变为了“日 年 月”格式。问题来了,同样的代码,如果
begin_day="17-2019-10",end_day="24-2019-10"。猜猜看会发生什么,我本来以为会被SimpleDateFormat解析异常,没想到代码正常运行,跑出来的days长度是2558。代码继续走,会开启2558个线程,每隔线程执行一个查询。就是因为这里一瞬间开启的线程过多,数据库扛不住压力了。导致被加入黑名单。严重的可能导致数据库瘫痪。
在此记录下次问题