4

I'm working on Spring cloud project (Spring Boot + Eureka API ) that contains client , registry and a config server , so I need to load Message properties from the config Server :

I have already a config server with application.properties well configured and available from client server .

My current MessageSource Bean in the client Micro-service:

@Configuration
public class Config {

    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:/messages/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
}
Matthias
  • 7,432
  • 6
  • 55
  • 88
Yassine Abainou
  • 145
  • 2
  • 13

2 Answers2

0

If you want to load them from the config service, you just need to point the config path for it.

The values on this class are read from the bootstrap.yml.

I have a folder called "locale" on the application.yml level, with the file "messages_en_GB.properties" inside.

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";
  }
Nel
  • 124
  • 6
0

I use embedding spring-cloud-config (spring.cloud.config.server.bootstrap=true), so I configured to download git repo to local folder near my runnable jar - build/config/backend

spring:
   cloud:
       config:
           server:
               bootstrap: true
               git:
                   searchPaths: backend
                   basedir: build/config

And after I used such configuration for message resources (my resources in messages directory in files messages*.properties)

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

and bean configuration

    @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;
    }

and after update configs from git repo it's also update message resources in application

panser
  • 1,949
  • 22
  • 16