控制台提示的信息:Error starting Tomcat context. Exception: java.lang.IllegalArgumentException. Message:Unable to set initialisation parameters for filter due to null name and/or value. Name [], Value [null]
昨天在服务器上更新代码的时候,项目怎么都启不起来,一直在报上面这个错误。我百度了很久,都没有适用的方法,今天终于把问题找出来了,实际是引用的包中有个参数没配置好,在读取的时候被当作非法参数了,所以报错了。后来找对应的负责人补上以后就好了。
因为每个人的问题不一样,所以这里记录一下我是怎么找到这个问题的。
1、先在控制台里找到报错的那一行,如下图,因为我已经没有当时报错的那个截图了,所以这里模拟一下。找到[ERROR] ,根据[ERROR]后面的信息,我们可以知道问题是出在了org.springframework.boot.web.embedded.tomcat.TomcatStarter这个包里的第87行(我这里没写上去,但是正常的是有的,放心)
2、根据报名,找到这个类,如下图
3、断点打好以后,范围还是太广,这个时候怎么缩小范围呢?那就是使用F7、F8等跟进
4、就按3的示意图里这样一点一点的往里跟踪,合理结合F7、F8、F9,把断点打在各个可能出现的地方,细节代码跳过就行了,主要是找到底是在哪一步抛的异常。跟踪的过程是枯燥的,但是也是不能避免的。最后针对我这个问题,我找到了问题是出在 DynamicRegistrationBean.class里的configure方法里,更具体一点是configure里的
registration.setInitParameters(this.initParameters);
这一步。如下图:
5、进入setInitParameters方法我们发现它也有3个实现类,那我这个问题是出在了第一实现类里,如下图:
6、继续进入5里的这个实现类,然后打好断点观察,最后终于找到了我这个问题的出处,如下图:
如上图,我这里有个参数名为“”,值为null,这正好和控制台的提示信息Message:Unable to set initialisation parameters for filter due to null name and/or value. Name [], Value [null]符合,而恰恰这正是在这一步之后就抛异常了,所以可以断定就是这里的问题。根据其他几个参数(已马赛克)我大致知道是公司中台那边的代码出问题了,因为我们引用了他们的这个包。最后的确是他们的问题,他们修改以后,我们这边更新一下maven就好了