この記事では、Spring セッションと Spring Boot を統合してセッション共有を実現する方法を紹介します。必要な方は参考にしていただければ幸いです。
私は最近 Spring Boot を使用してシステムを開発しました。nginx は負荷分散を行い、リクエストを複数の Tomcat に分散します。このとき、アクセス ページはサーバー側にリクエストを分散します。初回アクセスをAサーバーに分散した場合、セッションはAサーバーに保存され、再度アクセスする際には負荷分散によりBサーバーに分散されます。そうすると、初回アクセス時のセッション情報は取得できなくなります。幸いなことに、簡単な構成を使用してセッション共有を実現できる Spring セッションがあります。
<!-- Spring Boot Redis 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-core</artifactId> </dependency>
プロジェクト ディレクトリに Java ファイルを作成します (任意の名前)。このアノテーションは RedisSessionConfig.java
@EnableRedisHttpSession です。非常に重要です。追加後、Spring のインターセプトが使用され、構成ファイルの構成に従って Spring が Redis に接続できるようになります。
SpringSession redis にはバージョン 2.8 以降が必要であることに注意してください。その後、イベント通知を有効にします。redis 構成ファイルに
notify-keyspace-events Ex // 打开此配置,其中Ex表示键事件通知里面的key过期事件,每当有过期键被删除时,会发送通知
を追加するか、次のコマンドを使用してイベント通知を有効にします。 #
redis-cli config set notify-keyspace-events Egx
package org.spring.springboot.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.session.data.redis.config.ConfigureRedisAction; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @Configuration // maxInactiveIntervalInSeconds 默认是1800秒过期,这里测试修改为60秒 @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) public class RedisSessionConfig { @Bean public static ConfigureRedisAction configureRedisAction() { return ConfigureRedisAction.NO_OP; } }
# Redis 配置 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=192.168.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=1234
以上がSpringセッションとSpring Bootを統合してセッション共有を実現する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。