如何在 spring.main.web-application-type=none 上配置 JdbcIndexedSessionRepository

问题描述 投票:0回答:1

我们有2个spring-boot(3.3.0)应用程序

网络应用程序

  • N 个实例
  • 他们每分钟都安排一次 spring-session(jdbc) cleanup-cron 作业(依赖
    spring.session.jdbc.cleanup-cron

调度程序应用程序

  • 1 个实例
  • 不是网络应用程序 (
    spring.main.web-application-type=none
    )

这些应用程序连接到同一个数据库。

当我们更改为在 Web 应用程序上禁用 cleanup-cron 并在调度程序应用程序上启用 cleanup-cron 时,但未创建

JdbcIndexedSessionRepository

因为

SessionAutoConfiguration
被注释为
@ConditionalOnWebApplication
并且未自动配置。

如何在

JdbcIndexedSessionRepository
环境下初始化
spring.main.web-application-type=none


当前的解决方法是

  • spring-boot-starter-web
    添加到依赖项并作为 Web 应用程序运行。
  • 添加
    spring.main.lazy-initialization=false
    ,因为
    JdbcIndexedSessionRepository#afterPropertiesSet
    从未被调用且 cron 未安排。

调度程序应用程序

构建.gradle

implementation("org.springframework.session:spring-session-jdbc")
+ implementation("org.springframework.boot:spring-boot-starter-web")

应用程序.属性

+ spring.main.lazy-initialization=false
spring.session.store-type=jdbc
spring.session.timeout=24h
spring.session.jdbc.initialize-schema: never
spring-boot spring-session
1个回答
0
投票

您可以将自己的实例定义为

@Bean
类中的
@Configuration

@Bean
JdbcIndexedSessionRepository jdbcIndexedSessionRepository(JdbcOperations jdbcOperations, TransactionOperations transactionOperations) {
    JdbcIndexedSessionRepository repository = new JdbcIndexedSessionRepository(jdbcOperations, transactionOperations);
    // any additional customization that's needed
    return repository;
}
© www.soinside.com 2019 - 2024. All rights reserved.