Spring采用classpath*:前缀开头时,是可以使用**以及*来作为通配符,从jar当中加载资源(例如xml配置文件)的,但是一次偶然的机会发现只要使用了通配符,就无法正确从jar当中加载配置文件。web.xml当中的配置如下:
多次尝试发现,如果applicationContext*.xml文件位于磁盘上而不是jar内部,则运行正常。如果位于jar内部,则无法正确加载。
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext*.xml</param-value>
</init-param>
多次尝试发现,如果applicationContext*.xml文件位于磁盘上而不是jar内部,则运行正常。如果位于jar内部,则无法正确加载。
经多方查找资料,原来是打包为jar过程中选项设置不正确导致。导出jar时,下图所示的选项必须勾选,则通配符工作正常,否则无效。