通常Tomcatは再起動すると、セッションに保持していた情報は再起動後も引き継がれる(これはTomcatのデフォルト設定)。仕組みとしては、Tomcat停止時にセッション情報を一時ファイルに書き出し、Tomcat起動時にそのファイルを読み込みセッション情報をメモリに展開している。これを回避したい場合は、$CATALINA_HOME/conf/context.xmlに<Manager pathname="" />
を追加することで回避できる。
<Context>
~省略~
// 以下を追加
<Manager pathname="" />
</Context>
ただ、Spring Boot(Ver1.3以上)の組み込みTomcatは再起動すると、セッションに保持していた情報は再起動後は引き継がれない(通常のTomcatとは逆の挙動となる)。じゃあ、$CATALINA_HOME/conf/context.xmlを修正しよう、、と思ってもそもそもファイルが存在しない(組み込みTomcatなので)。そんな時は、application.properties(application.yml)に以下の設定値を追加することで解決することができる。
server.session.persistent=true
Spring Bootの組み込みTomcatのSession Persistenceはデフォルトで無効(false)なので、trueにしてやることでセッション永続化が可能となる。
注意点
以下のようにSpring Sessionへの依存があると、TomcatのHttpSessionではなくSpring Sessionが使われるため、application.propertiesでserver.session.persistentの設定をしても効かない。
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>