你的applicationContext.getResources(source)为什么只拿到了一个配置文件?

通常我们在某些需求中需要到一个目录获取很多的配置文件,如果你已知配置文件名字,是可以做到一个个取的,但是如果我们不知道配置文件的名字和数量呢?

说一个场景,在模块化架构中,我们未来有多少个模块是无法预估的,但是每个模块都需要有自己模块内的错误码,并且未来还要配合做国际化,也会涉及到配置文件数量及名字的不确定性(虽然我们可能会确定一个命名规范)。我们期望通过一次性的获取配置文件读取,不想每建一个模块都去对应的写一个获取错误码文件的实现。

那就要说道一下applicationContext.getResources(source)这个方法了,它是可以在指定目录下批量获取配置文件的,并且可以通过规则来进行模糊匹配,我遇到一个问题,调用这个方法就是只能获取一个???WHY?

我的入参source= classpath:com/zeus/message/error_code*.properties

问题在哪呢?看一下源码:

最后这个方法会委托给PathMatchingResourcePatternResolver这个类来进行实现,看一下实现代码:

 

 看到就知道为什么了,classpath如果后面加了*就返回所有,没有加*就返回一个,坑爹的设置!

所以把地址改为source= classpath*:com/zeus/message/error_code*.properties就行了。

这个地址还支持模糊匹配,比如上门我是名字模糊匹配,以error_code开头的全部获取,还有可以支持深度的目录层级:

classpath*:com/zeus/message/*/error_code*.properties(message目录下支持再加一级任何名称的目录节点)

classpath*:com/zeus/message/**/error_code*.properties(message目录下支持再加任意级任何名称的目录节点)

你可能感兴趣的:(JAVA,Spring,java,spring)