我正在处理包含客户端,注册表和配置服务器的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;
}
}
答案 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 directory
中messages*.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更新配置后,它还会更新应用程序中的消息资源