Spring启动yml ResourceBundle文件

时间:2017-04-27 11:01:31

标签: spring spring-boot properties-file resourcebundle

我正在使用Spring的MessageSource从类路径中的.properties文件加载错误消息。我的属性尊重某个“模板”,例如{Object}.{field}.{unrespectedConstraint}示例:

userRegistrationDto.password.Size= Le mot de passe doit avoir au minimum 6 caractères.
userRegistrationDto.email.ValidEmail= Merci de saisir une addresse mail valide.

在重构的情况下(例如,更改类的名称),我必须在几个地方更改我的属性文件。

有没有办法使用yaml文件(messages.yml)作为ResourceBundle来获取类似的内容:

userRegistrationDto:
  password:
    Size: Le mot de passe doit avoir au minimum 6 caractères.
  email:
    ValidEmail: Merci de saisir une addresse mail valide.

2 个答案:

答案 0 :(得分:4)

我设法找到的最佳解决方案是由@vtosh在我面前找到的:使用this library。唯一的问题(但仍然是)它不够流行。

另一个选项可能是扩展Java本地化支持,手动扩展ResourceBundle.Control类(您可以找到官方示例here)。但是,由于@vtosh找到的库使用了这种方法,因此我认为它没有多大意义。

为什么Spring没有解决方案?那么,您可以在this jira中找到答案。它仍然处于开放状态,所以我不希望至少现在是他们的任何解决方案。

答案 1 :(得分:4)

我认为这应该满足您的要求,如果您需要在VM操作期间重新加载MessageSource,您可能需要进行更多的挖掘。

@Configuration
public class TestConfig {

    @Bean(name = "testProperties")
    public Properties yamlProperties() throws IOException {
        YamlPropertiesFactoryBean bean = new YamlPropertiesFactoryBean();
        bean.setResources(new ClassPathResource("test.yml"));
        return bean.getObject();
    }

    @Bean
    public MessageSource messageSource() throws IOException {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setCommonMessages(yamlProperties());
        return messageSource;
    }
}