SpringBoot实现session共享和国际化

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: SpringBoot Session共享修改pom.xml添加依赖 org.springframework.session spring-session-data-redis添加配置类 RedisSessionConfig@Configura...

SpringBoot Session共享

修改pom.xml添加依赖

org.springframework.session spring-session-data-redis

添加配置类 RedisSessionConfig

@Configuration@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)//默认是1800秒过期,这里测试修改为60秒public class RedisSessionConfig {}

添加一个控制器类 SessionController 来进行测试

@RestControllerpublic 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

img_59d66c8b9b25c5539e24fec675779fe4.jpe

然后修改配置文件application.yml

spring: profiles: active: test

重新运行IDEA,test配置文件配置的端口是8085,所以浏览器输入http://localhost:8085/boot/uid

img_3cb5da8df6b2320eda40a0ac3ca56a45.jpe

我们看到两个uid是一样的。

在这里我是使用spring boot redis来实现session共享,你还可以配合使用nginx进行负载均衡,同时共享session。

关于nginx可以参考我的另一篇文章:Nginx详解-服务器集群

spring boot 国际化

在spring boot中实现国际化是很简单的的一件事情。

(1)在resources目录下面,我们新建几个资源文件,messages.properties相当于是默认配置的,当其它配置中找不到记录的时候,最后会再到这个配置文件中去查找。

messages.propertiesmessages_en_US.propertiesmessages_zh_CN.properties

依次在这三个配置文件中添加如下配置值:

msg=我是中国人msg=I'm Chinesemsg=我是中国人

添加完之后,会自动将这几个文件包在一块

img_5130b2b9539567cddbcaf3ad10ce7f6e.jpe

需要注意的是这个命名是有讲究的, messages.properties 部分是固定的,不同语言的话,我们可以在它们中间用_区分。为什么是固定的命名,因为源码是硬编码这样命名的。

(2)新建一个配置文件 LocaleConfig

@Configuration@EnableAutoConfiguration@ComponentScanpublic 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); LocaleResolver 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")); } return "redirect:/"; }

(4)添加视图来展示,在templates下新建文件i18n.html,通过#可以直接获取国际化配置文件中的配置项的值。

$Title$English(US)简体中文

(5)运行查看效果

img_dff19cc24af615ec823cf434928ef467.gif

欢迎加入Java高级架构学习交流群:375989619

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导 进群修改群备注:开发年限-地区-经验 方便架构师解答问题

免费领取架构师全套视频!!!!!!!!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
缓存 前端开发 Java
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
29 1
|
1月前
|
存储 NoSQL 前端开发
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
|
7月前
|
前端开发 JavaScript Java
SpringBoot Ajax跨域问题(session共享问题)
ajax 发送post请求至springBoot出现跨域问题 需要在springBoot加上注解 @CrossOrigin 就能解决
39 0
|
8月前
|
Java Spring 容器
Spring Boot入门(十五) 之 国际化操作(页面的中英文相互切换)
Spring Boot入门(十五) 之 国际化操作(页面的中英文相互切换)
336 0
|
4月前
|
Java 容器
SpringBoot下资源国际化应用实践
SpringBoot下资源国际化应用实践
52 0
|
6月前
|
Java
19 SpringBoot国际化
19 SpringBoot国际化
28 0
|
6月前
|
自然语言处理 Java 物联网
TDengine 资深研发整理:基于 SpringBoot 多语言实现 API 返回消息国际化
为了帮助开发者更好地进行 SpringBoot 的开发,避免开发盲点,我们将 TDengine 资深研发所做的内部分享——《SpringBoot 多语言支持方案》进行了相关整理,给到有需要的开发者参考。
88 1
|
7月前
|
Java Spring
Spring Boot 中的 Session 是什么,如何使用
Spring Boot 中的 Session 是什么,如何使用
|
8月前
|
缓存 Java Spring
SpringBoot-7-国际化
SpringBoot-7-国际化
66 0
|
8月前
|
Java
SpringBoot实现国际化
SpringMVC国际化步骤 1. 编写国际化配置文件 2. 使用ResourceBundleMessageSource管理国际化资源文件 3. 在 页面使用fmt:message取出国际化内容 以上是SpringMvc步骤,SpringBoot更简单了,直接帮我们配置好了。