最近在做SpringBoot的項目,用到了session,發現放置好session后,過一會就失效了,用下面發語句獲取session失效時間,發現是60s
request.getSession().getMaxInactiveInterval();
去網上查找,發現大多解決問題的辦法是 在啟動類中main方法的下面加入以下方法來手動設置session失效時間
@Bean public EmbeddedServletContainerCustomizer containerCustomizer(){ return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer Container) { container.setSessionTimeout(1800);//單位為S } }; }
但是社會在發展,時代在進步,SpringBoot2.0以后已經不支持這種方式了
ps:可以在pom文件中查看你的SpringBooot版本。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
SpringBoot2.0以后的版本只需要在application.properties中加入以下配置就好
server.servlet.session.timeout = PT5H
這里重點解釋一下 PT5H 意思是設置session失效的時間是5小時
通過查看setTimeouot的方法,這里要求傳入Duration的實例
public void setTimeout(Duration timeout) {
this.timeout = timeout;
}
Duration是在Java8中新增的,主要用來計算日期差值
Duration是被final聲明的,並且是線程安全的
Duration轉換字符串方式,默認為正,負以-開頭,緊接着P,以下字母不區分大小寫
D :天 T:天和小時之間的分隔符 H :小時 M:分鍾 S:秒 每個單位都必須是數字,且時分秒順序不能亂
比如P2dt3m5s P3d pt3h
最后總結一下Duration最實用的一個功能其實是 between 方法,因為有很多時候我們需要計算兩個日期之間的天數或者小時數,用這個就可以很方便的進行操作。
BugHome版權所有丨轉載請注明出處:https://minei.me/archives/342.html