spring-boot(八)和spring-session集成
分类:spring-boot
阅读:734
作者:马晶晶
发布:2016-12-30 12:33:49

当我们部署web应用的时候就会考虑到访问量大,如何来完成web应用的集群部署,那么依赖应用服务器来实现session的复制也是非常耗资源的,并且有的业务还需要购买商业的服务器来完成.

  • 在前面的文章发布后又小伙伴和我聊天说文章讲述过于简单,没有详细讲述具体实现原理,以及更多相关的知识扩展.
  • 我在这里也说明下,因为boot本身就是一个引导,spring-boot的文章个人也是在自学的途中进行整理,暂时只做基础知识的引导,不对源代码做过多的分析和解释,后续有时间我会对源代码进行详细解释.感谢小伙伴们的反馈.

spring-session就解决了web应用的session存储问题.可以方便的解决session问题.
spring-boot可以和spring-session快速的集成.
官方文档描述如下:
QQ截图20161230120557.png

我看了下网上都是讲述和redis的整合,因为也是用的最广泛的.但是jdbc几乎没有,下面开始完成整合spring-session-jdbc,案例代码在 spring-boot(四) 日志框架集成 的基础上进行改造.

项目结构图:
QQ截图20161230121036.png

pom 中引入支持

  1. <dependency>
  2. <groupId>org.springframework.session</groupId>
  3. <artifactId>spring-session-jdbc</artifactId>
  4. </dependency>

在 application.properties 文件中增加session的配置

  1. spring.session.store-type=jdbc
  2. #spring.session.jdbc.initializer.enabled=true
  3. #spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-mysql.sql
  4. #spring.session.jdbc.table-name=SPRING_SESSION

在代码中测试session

  1. @Controller
  2. public class HelloController {
  3. private Logger log = LoggerFactory.getLogger(this.getClass());
  4. @Autowired
  5. HelloService service;
  6. @RequestMapping("/hello/session/list")
  7. public String session(HttpSession session, Model model) {
  8. Object obj = session.getAttribute("session");
  9. log.info("obj : {}", obj);
  10. if (obj == null) {
  11. session.setAttribute("session", 123);
  12. }
  13. log.info("访问了 {} 接口 , 现在时间为 {} ", "/hello/list", new Date());
  14. model.addAttribute("list", service.queryHellos());
  15. return "list";
  16. }
  17. ... 省略部分代码
  18. }

在数据库中创建对应的表
QQ截图20161230121538.png

在主启动类中开启 EnableJdbcHttpSession

  1. @EnableJdbcHttpSession
  2. @SpringBootApplication
  3. public class MainApplication {
  4. public static void main(String[] args) throws Exception {
  5. SpringApplication.run(MainApplication.class, args);
  6. }
  7. }

到此代码已经编写完成. 启动主启动类, 访问浏览器 http://localhost:666/hello/session/list
观看控制台,并查看数据库
QQ截图20161230121931.png
QQ截图20161230122022.png

相关的更多的配置,自己参考官方文档进行探索, 比如数据库脚本自动创建,session的存储有效期等等,就不再详细介绍.

源代码附件地址: my-springboot-8.zip