一尘不染

Spring Boot MessageSourceAutoConfiguration

spring-boot

我有问题,或者可能我在Spring Boot中发现了一个错误。我目前不确定。我有一个具有以下依赖项的项目

  • spring-boot-starter-thymeleaf
  • spring-boot-starter-web
  • spring-boot-starter-actuator
  • spring-boot-starter-mail
  • spring-cloud-starter-bus-amqp
  • spring-cloud-starter-config
  • spring-cloud-starter-eureka

我想在Thymeleaf模板中使用messageSource,因此在application.yml中设置以下内容:

spring:
  messages:
    basename: de/mycompany/messages/message

并在上述包中放置了message.properties和message_de.properties。但是替换没有用。因此,我调试了MessageSourceAutoConfiguration并发现@Conditional(ResourceBundleCondition.class)起作用了。它找到了我的资源并返回true。所以我打印调试报告,发现它说

MessageSourceAutoConfiguration
      - Bundle found for spring.messages.basename: de/mycompany/messages/message (MessageSourceAutoConfiguration.ResourceBundleCondition)
      - @ConditionalOnMissingBean (types: org.springframework.context.MessageSource; SearchStrategy: all) found the following [messageSource] (OnBeanCondition)

因此,已经定义了另一个messageSource Bean,但是我想知道它的来源。所以我进一步调查,发现以下日志输出:

AnnotationConfigEmbeddedWebApplicationContext : Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@60df7989]

实际上,它来自initMessageSource方法中的类AbstractApplicationContext(大约622行)。在那里检查名称为“
messageSource”的bean,如果找不到,则创建上述DelegatingMessageSource。

我想念什么吗?我是否需要做一些事情才能使MessageSourceAutoConfiguration在AbstractApplicationContext之类的东西之前发生?还是这真的是一个错误?

对于我自己,我可以通过将自己的messageSource创建为@Bean来解决此问题,但是使用AutoConfiguration会更加聪明:)

基督徒问候


阅读 689

收藏
2020-05-30

共1个答案

一尘不染

原来这是一个错误,希望可以尽快解决,请在此处进行跟踪:

https://github.com/spring-cloud/spring-cloud-
commons/issues/29

2020-05-30