最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot實(shí)現(xiàn)多服務(wù)器session共享

 更新時(shí)間:2019年05月17日 11:35:15   作者:New_Yao  
這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)多服務(wù)器session共享,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了springboot實(shí)現(xiàn)多服務(wù)器session共享的具體代碼,供大家參考,具體內(nèi)容如下

環(huán)境:

springboot:2.0.4
redis:3.2.100
jdk:1.8
eclipse:4.9.0

1.原理

正常情況下,HTTPSession是通過(guò)servlet容器創(chuàng)建并管理的,創(chuàng)建成功后都保存在內(nèi)存中,如果開發(fā)者需要對(duì)項(xiàng)目進(jìn)行橫向拓展搭建集群,那么可以用一些硬件和軟件工具來(lái)做負(fù)載均衡,此時(shí),來(lái)自同一用戶的HTTP請(qǐng)求有可能會(huì)被發(fā)送到不同的實(shí)例上去,如何保證各個(gè)實(shí)例之間的Session同步就成為了一個(gè)必須解決的問(wèn)題,Springboot提供了自動(dòng)化session共享配置,它結(jié)合redis非常方便的解決了這個(gè)問(wèn)題。使用Redis解決session共享的原理非常簡(jiǎn)單,就是把原本儲(chǔ)存在不同服務(wù)器上的session拿出來(lái)放到一個(gè)獨(dú)立的服務(wù)器上,可以參考下圖來(lái)理解

當(dāng)一個(gè)請(qǐng)求到達(dá)Nginx服務(wù)器上時(shí),首先請(qǐng)求分發(fā),假設(shè)請(qǐng)求被server2處理了,server2在處理請(qǐng)求時(shí),無(wú)論存儲(chǔ)還是讀取session的操作,都是去操作session服務(wù)器而不是自身內(nèi)存中的session,其他server也是如此,這樣就實(shí)現(xiàn)了session共享!

2.如何實(shí)現(xiàn)

關(guān)于Nginx和Redis的配置,本文就不再詳細(xì)介紹,網(wǎng)上教程也有很多。這里使用手動(dòng)直接訪問(wèn)兩個(gè)端口模擬nginx反向代理。

2.1首先創(chuàng)建一個(gè)springboot項(xiàng)目,全部的pom.xml配置如下:

除了Redis依賴之外,這里還需要提供spring-session-data-redis依賴,Spring Session可以做到透明的替換掉應(yīng)用中的Session容器。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>cn</groupId>
 <artifactId>session-two</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>session-two</name>
 <url>http://maven.apache.org</url>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>

 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.4.RELEASE</version>
 <relativePath /> <!-- lookup parent from repository -->
 </parent>
 <dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <exclusions>
  <exclusion>
   <groupId>io.lettuce</groupId>
   <artifactId>lettuce-code</artifactId>
  </exclusion>
  </exclusions>
 </dependency>
 <dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
 </dependency>
 
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 
 <dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
 </dependency>
 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
  <plugins>
  <plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  </plugin>
 </plugins>
 </build>
</project>

2.2 application.properties中進(jìn)行redis配置

spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.max-wait=-1ms
spring.redis.jedis.pool.min-idle=0

2.3 創(chuàng)建controller測(cè)試

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
 
 @Value("${server.port}")
 String port;
 @PostMapping("save")
 public String saveName(String name,HttpSession session ) {
 session.setAttribute("name", name);
 return port;
 }
 
 @GetMapping("get")
 public String saveName(HttpSession session ) {
 return port+":"+session.getAttribute("name").toString();
 }
}

這里提供了兩個(gè)接口,一個(gè)是save用來(lái)向session中保存數(shù)據(jù),一個(gè)是get用來(lái)從session中獲取數(shù)據(jù),這里注入了項(xiàng)目端口server.prot主要是用來(lái)顯示是那個(gè)服務(wù)器提供的服務(wù)(Nginx下方便查看),雖然我們?cè)谶@里操作的是Httpsession,但是其實(shí)Httpsession容器已經(jīng)被透明的替換掉了,真正的session此時(shí)存儲(chǔ)在redis服務(wù)器上。

3.進(jìn)行測(cè)試

3.1將項(xiàng)目打成jar包,然后打開兩個(gè)命令提示框,分別執(zhí)行如下兩個(gè)命令啟動(dòng)項(xiàng)目

java -jar session-two-0.0.1-SNAPSHOT.jar --server.port=81
java -jar session-two-0.0.1-SNAPSHOT.jar --server.port=82

3.2使用Postman測(cè)試

3.2.1 訪問(wèn)81服務(wù)器并且設(shè)置name為張三

3.2.2 訪問(wèn)82服務(wù)器獲取session中保存的name

至此,一個(gè)簡(jiǎn)單的demo就完成了

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中拼接字符串的5種方法效率對(duì)比

    java中拼接字符串的5種方法效率對(duì)比

    這篇文章主要給大家介紹了關(guān)于java中拼接字符串的5種方法效率對(duì)比的相關(guān)資料,文中通過(guò)示例代碼和圖片介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 在Spring異步調(diào)用中傳遞上下文的方法

    在Spring異步調(diào)用中傳遞上下文的方法

    這篇文章主要給大家介紹了關(guān)于如何在Spring異步調(diào)用中傳遞上下文的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式流程詳解

    Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式流程詳解

    中綴表達(dá)式是一個(gè)通用的算術(shù)或邏輯公式表示方法。,中綴表達(dá)式不容易被計(jì)算機(jī)解析,但仍被許多程序語(yǔ)言使用,因?yàn)樗先藗兊钠毡橛梅?。本文介紹了實(shí)現(xiàn)中綴表達(dá)式的方法,需要的可以參考一下
    2022-09-09
  • SpringBoot中的跨域詳解

    SpringBoot中的跨域詳解

    這篇文章主要介紹了SpringBoot中的跨域詳解,在瀏覽器上當(dāng)前訪問(wèn)的網(wǎng)站,向另一個(gè)網(wǎng)站發(fā)送請(qǐng)求,用于獲取數(shù)據(jù)的過(guò)程就是跨域請(qǐng)求,跨域是瀏覽器的同源策略決定的,是一個(gè)重要的瀏覽器安全策略,需要的朋友可以參考下
    2023-08-08
  • Java文件流關(guān)閉和垃圾回收機(jī)制

    Java文件流關(guān)閉和垃圾回收機(jī)制

    本文是關(guān)于Java IO文件流和垃圾回收問(wèn)題,一個(gè)小的測(cè)試程序搞清楚Java IO的問(wèn)題,希望能幫助有需要的小伙伴
    2016-07-07
  • jvm調(diào)優(yōu)常用命令行工具詳解

    jvm調(diào)優(yōu)常用命令行工具詳解

    這篇文章主要介紹了jvm調(diào)優(yōu)常用命令行工具的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java Web stmp發(fā)送帶附件郵件(附SSL版)

    Java Web stmp發(fā)送帶附件郵件(附SSL版)

    這篇文章主要為大家詳細(xì)介紹了Java Web stmp發(fā)送帶附件郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 解析Java和Eclipse中加載本地庫(kù)(.dll文件)的詳細(xì)說(shuō)明

    解析Java和Eclipse中加載本地庫(kù)(.dll文件)的詳細(xì)說(shuō)明

    本篇文章是對(duì)Java和Eclipse中加載本地庫(kù)(.dll文件)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • java實(shí)現(xiàn)簡(jiǎn)單超市管理系統(tǒng)

    java實(shí)現(xiàn)簡(jiǎn)單超市管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單超市管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限詳解

    Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限詳解

    這篇文章主要介紹了Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限詳解, 通過(guò)Mybatis攔截器我們可以攔截某些方法的調(diào)用,我們可以選擇在這些被攔截的方法執(zhí)行前后加上某些邏輯,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

苏尼特左旗| 裕民县| 贵南县| 黎城县| 富民县| 凤阳县| 乡城县| 昔阳县| 平舆县| 平遥县| 伽师县| 阜城县| 彰化县| 渭南市| 泌阳县| 赤壁市| 永嘉县| 杭锦旗| 防城港市| 嵊州市| 会同县| 石阡县| 古田县| 白沙| 财经| 余姚市| 临高县| 青田县| 重庆市| 平定县| 张家口市| 卢氏县| 海宁市| 大足县| 两当县| 阿拉尔市| 临夏县| 静安区| 寻乌县| 千阳县| 岳阳市|