JdbcSessionRepository.setDefaultMaxInactiveInterval
和 server.servlet.session.timeout
是两个用于设置会话超时的配置项,但它们的作用范围和应用场景略有不同。
当同时配置了这两个值时,JdbcSessionRepository.setDefaultMaxInactiveInterval
的优先级通常高于 server.servlet.session.timeout
。这意味着即使 server.servlet.session.timeout
设置了一个较短的时间,只要 JdbcSessionRepository.setDefaultMaxInactiveInterval
设置的时间更长,会话仍然会在数据库中保持活动状态。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.jdbc.JdbcOperationsSessionRepository;
import org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession;
@Configuration
@EnableJdbcHttpSession
public class SessionConfig {
@Bean
public JdbcOperationsSessionRepository jdbcSessionRepository() {
JdbcOperationsSessionRepository sessionRepository = new JdbcOperationsSessionRepository(dataSource());
sessionRepository.setDefaultMaxInactiveInterval(1800); // 30分钟
return sessionRepository;
}
@Bean
public DataSource dataSource() {
// 配置数据源
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("org/springframework/session/jdbc/schema-h2.sql")
.build();
}
}
在 application.properties
或 application.yml
中配置 server.servlet.session.timeout
:
server.servlet.session.timeout=1800 # 30分钟
通过以上配置,可以确保会话在数据库中的超时时间优先于内存中的超时时间。
领取专属 10元无门槛券
手把手带您无忧上云