@RestController
public class SessionController {
@RequestMapping("/uid")
String uid(HttpSession session) {
UUID uid = (UUID) session.getAttribute(“uid”);
if (uid == null) {
uid = UUID.randomUUID();
}
session.setAttribute(“uid”, uid);
return session.getId();
}
}
先访问
http://localhost:8083/boot/uid
然后修改配置文件application.yml
spring:
profiles:
active: test
重新运行IDEA,test配置文件配置的端口是8085,所以浏览器输入
http://localhost:8085/boot/uid
我们看到两个uid是一样的。
在这里我是使用spring boot redis来实现session共享,你还可以配合使用nginx进行负载均衡,同时共享session。
关于nginx可以参考我的另一篇文章:Nginx详解-服务器集群
spring boot 国际化
在spring boot中实现国际化是很简单的的一件事情。
(1)在resources目录下面,我们新建几个资源文件,messages.properties相当于是默认配置的,当其它配置中找不到记录的时候,最后会再到这个配置文件中去查找。
messages.properties
messages_en_US.properties
messages_zh_CN.properties
依次在这三个配置文件中添加如下配置值:
msg=我是中国人
msg=I’m Chinese
msg=我是中国人
添加完之后,会自动将这几个文件包在一块
需要注意的是这个命名是有讲究的, messages.properties 部分是固定的,不同语言的话,我们可以在它们中间用_区分。为什么是固定的命名,因为源码是硬编码这样命名的。
(2)新建一个配置文件 LocaleConfig
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class LocaleConfig extends WebMvcConfigurerAdapter {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
// 默认语言
slr.setDefaultLocale(Locale.CHINA);
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// 参数名
lci.setParamName(“lang”);
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
(3)在控制器中,我们添加测试用的方法
// i18n
@RequestMapping("/")
public String i18n() {
return “i18n”;
}
@RequestMapping("/changeSessionLanauage")
public String changeSessionLanauage(HttpServletRequest request, HttpServletResponse response, String lang){
System.out.println(lang);
Loca
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
leResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
if(“zh”.equals(lang)){
localeResolver.setLocale(request, response, new Locale(“zh”, “CN”));
}else if(“en”.equals(lang)){
localeResolver.setLocale(request, response, new Locale(“en”, “US”));