[spring-projects/spring-boot]如果设置了自定义基本名称并且不存在默认属性文件,则自动配置消息源

2024-06-26 96 views
8

你好,Spring Boot 属性: spring.messages.basename =[directoy_in_resources]/messages 不起作用,我的项目中有这个树状结构: 图像 我通过编写以下内容解决了这个问题:

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("messages/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

但它看起来有点沉重,不是吗?

为什么我不能写这个在application.properties中:

spring.messages.basename=messages/messages

感谢大家

里克

回答

9

当然有一个测试可以执行我从你的描述中了解到的场景,并且它通过了。

我觉得在自定义 bean 中复制/粘贴相同的信息就能解决问题,这有点奇怪。如果我们想取得一些进展,我们需要一个小样本来重现您描述的问题。您可以通过将 zip 附加到此问题或分享 GitHub 存储库链接来实现这一点。

3

好的,我给你打包了一个简单的项目。

3

1/ 启动 Application.java 2/ 转到http://localhost:8083/snic 3/ 该项目可以运行,但是 Spring Boot 属性: spring.messages.basename=messages/messages 不起作用

4

谢谢你的样品。

此资源包没有messages.properties,我们用它作为信号来验证是否应启用此功能。请参阅参考指南了解更多详细信息。

我已重命名messages_en.propertiesmessages.properties注释掉您的自定义 bean 定义,现在示例对我而言已经可用。我建议无论如何都要messages.properties在资源包中设置默认属性(即)。

话虽如此,您还配置了一个自定义基本名称,我们可以用它作为强烈信号,表明您想要使用此功能。我已将此问题标记给团队,以查看我们是否要稍微放宽条件,并在设置了自定义基本名称且没有可用的默认属性时创建该 bean。

4

感谢您的快速回复。工作正常!是的,此功能在“Spring Boot”思维中非常有用,它可以减少代码并用属性替换它。非常感谢!

0

即使 messages.properties 为空它也能工作...

9

我想我就是那个结束这件事的人

9

出于性能原因,我们在https://github.com/spring-projects/spring-boot/issues/4930中添加了对默认属性文件的要求。我们还认为,将默认属性文件作为后备是件好事。在我看来,这两种说法仍然适用。如果我们想更改其中一个或两个,我认为应该这样做,无论基本名称是否已自定义,因为我不认为自定义基本名称可以用作性能不再重要的信号,或者将默认属性文件作为后备不再是一件好事。

7

好的,谢谢大家。

1

谢谢@wilkinsona。我认为,我们建议使用默认属性文件作为后备,这是关键所在。我同意这会开创一个奇怪的先例,鉴于参考指南中已正确记录了相关内容,我同意我们对当前状态感到满意。