2014年的开篇文章,可能名字比较特殊。关于PropertyPlaceholderConfigurer这个类可能很多人都用过了,并且也不会出什么问题。出了问题大概也都知道怎么解决的。
无非就是Could not resolve placeholder 'xxx'这样的错误。加个属性ignoreUnresolvablePlaceholders=true。貌似这并没有什么的。可是昨天一同事遇到这个问题。我就一直在想这是为什么。于是跟了下源码。
发现这个问题的原因就是,当加载PropertyPlaceholderConfigurer这个类的时候,他会去扫描所以的类并初始化每个类被占位的(当然这里默认的是${}这样的占位符)变量。当其发现了被占位的变量,并且在本properties文件中没有的属性的时候,他就会报错,如果你加上了忽略解决不了的占位符的时候,他就会继续,并且不会抛出异常。了解了原理之后,其实你可能还会想出一种解决的办法,那就是其他的什么*Context.xml中用到的PropertyPlaceholderConfigurer这个类可以换个占位符就不会报错了,例如加个这样的属性<property name="placeholderPrefix" value="@{"/>也不错。
可能我比较变态的执着,为了这个问题,我下班回家还搞了好久,不知道为什么,每次如果遇到问题。我就一定要知道为什么会报错,可能我解决不了,但我如果不知道原因,那我就会睡不着,甚至做梦也会想着这个问题。曾经有一次遇到一个问题,问了几个大神都没有解决,我当然也不晓得为什么,于是纠结了好久。突然的某一天晚上睡觉把问题给想通了。然后第二天去办公室验证了一下,果不其然的对了。
2014年的第一篇文章,希望以后也会坚持这样,哪怕就是每天解决一个问题,那也是进步。