DevToolsを組み込んでいると再起動してもsessionが引き継がれる
   1 min read

Spring Boot開発中、再起動するとsessionは消失すると思いこんでいたのですが、どうも引き継がれているように見えて混乱しました。

その後、調査してみると server.servlet.session.persistent プロパティで再起動時セッションを破棄するか保持するかを設定できることがわかりました。ただし、デフォルト値は false で、もちろんデフォルトからは変更していません(存在を知らなかったので)。

仕方がないので Session#setPersistent() メソッドでブレークポイントを設定してデバッグ実行してみたところ、確かに誰かが true に設定しようとしていることがわかりました。 しかし、誰が設定しようとしているのかが全くわからない…

更にググってなんとか情報が見つかりました:

これによると DevToolsPropertyDefaultsPostProcessor で設定されている、とのことなので見てみると… 確かに

というか、DevToolsを組み込むことで他にもいろんなデバッグ用設定が有効になるんですね…知りませんでした。

properties.put("spring.thymeleaf.cache", "false");
properties.put("spring.freemarker.cache", "false");
properties.put("spring.groovy.template.cache", "false");
properties.put("spring.mustache.cache", "false");
properties.put("server.servlet.session.persistent", "true");
properties.put("spring.h2.console.enabled", "true");
properties.put("spring.resources.cache.period", "0");
properties.put("spring.resources.chain.cache", "false");
properties.put("spring.template.provider.cache", "false");
properties.put("spring.mvc.log-resolved-exception", "true");
properties.put("server.error.include-binding-errors", "ALWAYS");
properties.put("server.error.include-message", "ALWAYS");
properties.put("server.error.include-stacktrace", "ALWAYS");
properties.put("server.servlet.jsp.init-parameters.development", "true");
properties.put("spring.reactor.debug", "true");