尝试从 junit 测试为 ResourceBundleMessageSource spring 类设置基名,当测试尝试获取消息时,我收到以下“在密钥下找不到消息......”。我有下面的下一个配置用于测试。 MessageSourceHolder 是一个静态类,用于保存消息源。 setBasename参数有问题吗?不允许使用前缀“file”?我在“src/main/resources/i18n”下确实有一个 message.properties 文件。
AbstractResourceBasedMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("file:src/main/resources/i18n/messages");
messageSource.setFallbackToSystemLocale(false);
MessageSourceHolder.setMessageSource(messageSource);
如果我这样做,它会起作用:
File file = Paths.get("src/main/resources/i18n/messages.properties").toFile();
Properties properties = new Properties();
properties.load(new FileReader(file));
AbstractResourceBasedMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setCommonMessages(properties);
MessageSourceHolder.setMessageSource(messageSource);
我注意到 ResourceBundleMessageSource 类文档中写着:
基本名称遵循 ResourceBundle 约定:本质上, 完全限定的类路径位置
所以它不允许前缀文件。 ReloadableResourceBundleMessageSource 类允许使用前缀,因为它遵循资源约定。