日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用spring-session外部化Spring-boot应用程序的会话状态

發布時間:2023/12/3 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用spring-session外部化Spring-boot应用程序的会话状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring-session是一個非常酷的新項目,旨在提供一種更簡單的方法來管理基于Java的Web應用程序中的會話。 我最近在spring-session中探索的功能之一是它支持外部化會話狀態的方式,而無需費心諸如Tomcat或Jetty之類的特定Web容器的內部。

為了測試spring-session,我使用了購物車類型的應用程序(可在此處獲得 ),該應用程序通過將添加到購物車中的項保留為session屬性來大量使用session,如以下屏幕截圖所示:


首先考慮沒有Spring會話的場景。 所以這就是我公開我的應用程序的方式:

我正在使用nginx在該應用程序的兩個實例之間實現負載平衡。 使用Spring boot可以很容易地運行此設置,我通過兩個不同的服務器端口啟動了該應用程序的兩個實例:

mvn spring-boot:run -Dserver.port=8080 mvn spring-boot:run -Dserver.port=8082

這是我的nginx.conf,可以在這兩個實例之間實現負載平衡:

events {worker_connections 1024; } http {upstream sessionApp {server localhost:8080;server localhost:8082;}server {listen 80;location / {proxy_pass http://sessionApp;} } }

我在頁腳中顯示應用程序的端口號只是為了顯示哪個實例正在處理請求。

如果我不采取任何措施將會話狀態移出應用程序,則該應用程序的行為將不穩定,因為在另一個實例上無法識別在該應用程序的一個實例上建立的會話-特別是如果Tomcat接收到一個會話id,它無法識別,則行為是創建一個新會話。

將Spring會話引入應用程序

有一些特定于容器的方法來引入外部會話存儲– 這里是一個示例,其中Redis被配置為Tomcat的存儲。 Pivotal Gemfire提供了一個模塊來外部化Tomcat的會話狀態 。

使用Spring-session的好處是根本不依賴容器-保持會話狀態成為應用程序的考慮因素。 在Spring會話站點上,關于配置應用程序以使用Spring會話的說明非常詳細,只是為了快速總結一下我如何配置Spring Boot應用程序,這些首先是我引入的依賴項:

<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session</artifactId><version>1.0.0.BUILD-SNAPSHOT</version> </dependency> <dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId><version>1.0.0.BUILD-SNAPSHOT</version> </dependency> <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.4.1.RELEASE</version> </dependency> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.4.1</version> </dependency>

以及將Spring-session用于會話支持的配置,請注意特定于Spring Boot的FilterRegistrationBean,用于注冊會話存儲庫過濾器 :

mport org.springframework.boot.context.embedded.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.session.web.http.SessionRepositoryFilter; import org.springframework.web.filter.DelegatingFilterProxy;import java.util.Arrays;@Configuration @EnableRedisHttpSession public class SessionRepositoryConfig {@Bean@Order(value = 0)public FilterRegistrationBean sessionRepositoryFilterRegistration(SessionRepositoryFilter springSessionRepositoryFilter) {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(new DelegatingFilterProxy(springSessionRepositoryFilter));filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));return filterRegistrationBean;}@Beanpublic JedisConnectionFactory connectionFactory() {return new JedisConnectionFactory();} }

就是這樣! 現在神奇的是,所有會話都由Spring會話處理,并巧妙地外部化到Redis。

如果我要重試以前的使用nginx使用公共Redis存儲對兩個不同的Spring-Boot應用程序進行負載平衡的配置,則該應用程序將正常運行,而不管實例處理請求的情況如何。 我期待進一步完善這個出色的新項目。

  • 使用Spring會話的示例應用程序可在此處獲得 :https://github.com/bijukunjummen/shopping-cart-cf-app.git

翻譯自: https://www.javacodegeeks.com/2014/11/externalizing-session-state-for-a-spring-boot-application-using-spring-session.html

總結

以上是生活随笔為你收集整理的使用spring-session外部化Spring-boot应用程序的会话状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。