spring.messages.basename 怎么模糊匹配对应路径下的文件
时间: 2024-02-23 09:02:57 浏览: 177
在 Spring Boot 中,如果需要在指定路径下模糊匹配对应的国际化资源文件,可以通过在 `spring.messages.basename` 属性中使用 `classpath*:` 前缀来实现。例如,可以将 `spring.messages.basename` 属性设置为 `classpath*:i18n/messages_*`,表示加载 classpath 下 i18n 文件夹下所有以 `messages_` 开头的资源文件,如 `messages_en.properties`、`messages_zh.properties` 等。
需要注意的是,在使用 `classpath*:` 前缀时,不仅会在 classpath 中查找资源文件,还会在所有 jar 包中查找资源文件。因此,如果存在多个 jar 包中都有相同的资源文件,就可能会导致加载冲突的问题。
同时,还可以通过在 MessageSource 中配置 `setUseCodeAsDefaultMessage(true)` 来开启模糊匹配。这样,当找不到对应的消息时,就会使用消息代码作为默认消息。例如,在 `messages_en.properties` 中,定义了一个消息 `hello.world=Hello, World!`,在 `messages_zh.properties` 中,没有定义这个消息,但是定义了一个消息 `hello=你好`。当我们使用 `Locale.ENGLISH` 时,在 `messages_zh.properties` 中就找不到 `hello.world` 对应的消息,此时会使用 `hello.world` 作为默认消息。代码如下:
```java
@Autowired
private MessageSource messageSource;
public String getMessage(String code, Object... args) {
return messageSource.getMessage(code, args, code, LocaleContextHolder.getLocale());
}
```
在上面的代码中,当找不到对应的消息时,使用 `code` 作为默认消息。
需要注意的是,使用模糊匹配时,要确保所有的资源文件都遵循相同的命名规则,否则会出现加载不到资源文件的情况。
阅读全文