spring-boot(八)和spring-session集成

分类:spring-boot
阅读:2740
作者:majingjing
发布:2016-12-30 12:33

当我们部署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 中引入支持

<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";
	}
	... 省略部分代码
}

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

在主启动类中开启 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 观看控制台,并查看数据库 QQ截图20161230121931.png QQ截图20161230122022.png

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

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