当我们部署web应用的时候就会考虑到访问量大,如何来完成web应用的集群部署,那么依赖应用服务器来实现session的复制也是非常耗资源的,并且有的业务还需要购买商业的服务器来完成.
- 在前面的文章发布后又小伙伴和我聊天说文章讲述过于简单,没有详细讲述具体实现原理,以及更多相关的知识扩展.
- 我在这里也说明下,因为boot本身就是一个引导,spring-boot的文章个人也是在自学的途中进行整理,暂时只做基础知识的引导,不对源代码做过多的分析和解释,后续有时间我会对源代码进行详细解释.感谢小伙伴们的反馈.
spring-session就解决了web应用的session存储问题.可以方便的解决session问题. spring-boot可以和spring-session快速的集成. 官方文档描述如下:
我看了下网上都是讲述和redis的整合,因为也是用的最广泛的.但是jdbc几乎没有,下面开始完成整合spring-session-jdbc,案例代码在 spring-boot(四) 日志框架集成 的基础上进行改造.
项目结构图:
pom 中引入支持
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-jdbc</artifactId>
</dependency>
在 application.properties 文件中增加session的配置
spring.session.store-type=jdbc
#spring.session.jdbc.initializer.enabled=true
#spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-mysql.sql
#spring.session.jdbc.table-name=SPRING_SESSION
在代码中测试session
@Controller
public class HelloController {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
HelloService service;
@RequestMapping("/hello/session/list")
public String session(HttpSession session, Model model) {
Object obj = session.getAttribute("session");
log.info("obj : {}", obj);
if (obj == null) {
session.setAttribute("session", 123);
}
log.info("访问了 {} 接口 , 现在时间为 {} ", "/hello/list", new Date());
model.addAttribute("list", service.queryHellos());
return "list";
}
... 省略部分代码
}
在数据库中创建对应的表
在主启动类中开启 EnableJdbcHttpSession
@EnableJdbcHttpSession
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(MainApplication.class, args);
}
}
到此代码已经编写完成. 启动主启动类, 访问浏览器 http://localhost:666/hello/session/list 观看控制台,并查看数据库
相关的更多的配置,自己参考官方文档进行探索, 比如数据库脚本自动创建,session的存储有效期等等,就不再详细介绍.
源代码附件地址: my-springboot-8.zip