最近在做SpringBoot的项目,用到了session,发现放置好session后,过一会就失效了,用下面发语句获取session失效时间,发现是60s
1 2 3 |
request.getSession().getMaxInactiveInterval(); 去网上查找,发现大多解决问题的办法是 在启动类中main方法的下面加入以下方法来手动设置session失效时间 |
1 2 3 4 5 6 7 8 9 10 11 12 |
@Bean public EmbeddedServletContainerCustomizer containerCustomizer(){ return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer Container) { container.setSessionTimeout(1800);//单位为S } }; } 但是社会在发展,时代在进步,SpringBoot2.0以后已经不支持这种方式了 ps:可以在pom文件中查看你的SpringBooot版本。 |
1 2 3 4 5 6 7 8 |
<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中加入以下配置就好 |
1 2 3 4 |
server.servlet.session.timeout = PT5H 这里重点解释一下 PT5H 意思是设置session失效的时间是5小时 通过查看setTimeouot的方法,这里要求传入Duration的实例 |
1 2 3 4 5 6 7 8 9 10 11 |
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