Vik*_*ikk 2 java spring spring-boot
我有一个春季启动应用程序,它使用国家明智的配置文件.配置文件的结构相同,但不同国家/地区的值不同.
我在资源目录中为每个国家/地区创建了一个目录,并将该国家/地区的配置文件放在那里.
根据请求参数中传递的国家/地区代码,我想使用相应的配置文件.什么是弹簧启动惯用的方法来实现这一点(除了使用像snakeyaml手动加载yaml配置文件)?
谢谢
您可以通过创建豆acheive MessageSource,LocaleResolver并LocaleChangeInterceptorbean,然后加入LocaleChangeInterceptor到InterceptorRegistry这样的:
@Configuration
public class CountryConfig extends WebMvcConfigurerAdapter{
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:country-conf/country");
messageSource.setUseCodeAsDefaultMessage(true);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(3600);
return messageSource;
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("country");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个文件夹- country-conf在resources文件夹中.在此文件夹中创建将具有您的配置的属性文件.例如:
country.properties(默认)
country.name=United states
Run Code Online (Sandbox Code Playgroud)
country_fr.properties
country.name=France
Run Code Online (Sandbox Code Playgroud)
country.properties如果参数中没有发送国家/地区是默认属性,如果您发送country=fr参数然后它将查找country_fr.properties文件.
现在创建一个服务,该服务将根据country参数从这些属性文件中获取值
@Service
public class CountryService {
@Autowired
private MessageSource messageSource;
public String getMessage(String code) {
Locale locale = LocaleContextHolder.getLocale();
return this.messageSource.getMessage(code, null, locale);
}
}
Run Code Online (Sandbox Code Playgroud)
测试此autowire国家/地区服务
@Autowired
CountryService countryService;
Run Code Online (Sandbox Code Playgroud)
然后调用getMessage方法
countryService.getMessage("country.name");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |