Spring Cloud:从配置服务器加载消息源

时间:2019-03-07 14:22:26

标签: java spring message spring-cloud-netflix configserver

我正在处理包含客户端,注册表和配置服务器的Spring云项目(Spring Boot + Eureka API),因此我需要从Config Server加载Message属性:

我已经有一个配置服务器,其application.properties配置良好,可以从客户端服务器上获得。

客户端微服务中我当前的MessageSource Bean:

@Configuration

公共类Config {

@Bean
public ReloadableResourceBundleMessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:/messages/messages");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;

}

}

2 个答案:

答案 0 :(得分:0)

如果要从配置服务中加载它们,只需指向它的配置路径即可。

此类的值是从bootstrap.yml中读取的。

在application.yml级别上有一个名为“ locale”的文件夹,其中包含文件“ messages_en_GB.properties”。

Structure:
  application.yml
  locale (folder)
     messages_en_GB.properties

@Configuration
public class MessageConfig {

  private static final Logger LOGGER = LoggerFactory.getLogger(MessageConfig.class);

  @Value("${spring.cloud.config.uri}")
  private String cloudUri;

  @Value("${spring.cloud.config.label}")
  private String cloudLabel;

  @Value("${spring.profiles.active}")
  private String profile;

  @Value("${spring.cloud.config.enabled:false}")
  private boolean cloudEnabled;

  @Bean
  @RefreshScope
  public ReloadableResourceBundleMessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource =
        new ReloadableResourceBundleMessageSource();
    messageSource.setBasename(buildMessageLocation());
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
  }

  private String buildMessageLocation() {

    if (Strings.isNullOrEmpty(cloudUri) || Strings.isNullOrEmpty(profile) || Strings
        .isNullOrEmpty(cloudLabel) || !cloudEnabled) {
      LOGGER.info("The cloud configuration is disabled, using local messages properties file");
      return "classpath:locale/messages";
    }

    return cloudUri + "/" + profile + "/" + profile + "/" + cloudLabel + "/locale/" + "messages";
  }

答案 1 :(得分:0)

我使用嵌入spring-cloud-config(spring.cloud.config.server.bootstrap=true),因此我配置为将git repo下载到可运行jar-build/config/backend

附近的本地文件夹中
spring:
   cloud:
       config:
           server:
               bootstrap: true
               git:
                   searchPaths: backend
                   basedir: build/config

在我对消息资源(文件messages directorymessages*.properties中的资源)进行了这种配置之后

spring.messages.basename=file:${spring.cloud.config.server.git.basedir}/${spring.cloud.config.server.git.searchPaths}/messages/messages

和bean配置

    @Value("${spring.messages.basename}")
    private String basename;

    @Value("${spring.messages.cache-duration}")
    private Duration cacheDuration;

    @Value("${spring.messages.use-code-as-default-message}")
    private Boolean useCodeAsDefaultMessage;

    @Bean
    @Primary
    @RefreshScope
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(StringUtils.trimAllWhitespace(basename)));
        messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());
        messageSource.setCacheMillis(cacheDuration.toMillis());
        messageSource.setUseCodeAsDefaultMessage(useCodeAsDefaultMessage);
        return messageSource;
    }

从git repo更新配置后,它还会更新应用程序中的消息资源