spring cloud
spring boot
restful
maven
intellij idea
session
通过之前一系列的演示可以发现整个Rest项目中的一个问题所在,所有的Rest都是基于HTTP协议的一种应用,而在这种应用上,所有的WEB容器一般都会提供有一个Session的机制,也就是说每一个用户访问之后如果该用户一直连接,则认为该用户应该一直被服务器保存状态,但是微服务有可能同时并发访问几十万人,那么如果所有的session状态都被维护着?
【microcloud-provider-dept-8001】现在修改Rest程序类,追加一个取得session id的方法。package com.gwolf.microcloud.rest;import com.gwolf.microcloud.service.IDeptService;import com.gwolf.vo.Dept;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;/** * Package: com.gwolf.microcloud.rest * Description: TODO * Author: * Date: Created in 2017-11-12 12:21 * Company: * Copyright: Copyright (c) 2017 * Version: 0.0.1 * Modified By: */@RestControllerpublic class DeptRest { @Resource private IDeptService deptService; @RequestMapping('/dept/id') public Object id(HttpServletRequest request) { return request.getSession().getId(); } @RequestMapping(value = '/dept/get/{id}',method = RequestMethod.GET) public Object get(@PathVariable('id') long id) { return this.deptService.get(id); } @RequestMapping(value = '/dept/add',method = RequestMethod.POST) public Object add(@RequestBody Dept dept) { return this.deptService.add(dept); } @RequestMapping(value = '/dept/list',method = RequestMethod.GET) public Object list() { return this.deptService.list(); }}
随后进行提供者的Rest连接访问:http://dept-8001.com:8001/dept/id,session id被保存处理了。
【microcloud-provider-dept-8001】修改application.yml配置:以下为保值Session状态:服务器内存有可能被占满server: port: 8001mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径 type-aliases-package: com.gwolf.vo # 定义所有操作类的别名所在包 mapper-locations: # 所有的mapper映射文件 - classpath:mybatis/mapper/**/*.xmlspring: datasource: type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型 driver-class-name: com.mysql.cj.jdbc.Driver # 配置MySQL的驱动程序类 url: jdbc:mysql://localhost:3306/mldn_1?serverTimezone=UTC # 数据库连接地址 username: root # 数据库用户名 password: root # 数据库连接密码 dbcp2: # 进行数据库连接池的配置 min-idle: 5 # 数据库连接池的最小维持连接数 initial-size: 5 # 初始化提供的连接数 max-total: 5 # 最大的连接数 max-wait-millis: 200 # 等待连接获取的最大超时时间 application: name: microcloud-provider-deptsecurity: user: name: gwolf #用户名 password: gwolf #密码 role: #授权角色 - USER sessions: always
不管你以后的项目或者支持类中是否有设置无状态的问题,你最好都进行一下设置,否则你的Rest服务在收到严重的内存困扰,最严重的的问题就是内存溢出。这个是标注的做法。