【发布时间】:2020-11-11 08:21:16
【问题描述】:
OK - 问题 ==> 2 个(或更多)数据源在使用 Springboot Session 时会导致错误。
我有一个 Springboot 项目,有不同的数据源用于不同的目的。所以在上述项目中,我想让 Spring 用 Spring-Session 模块的 HttpSession 替换 HttpSession。
如果您遵循指南,会话表的创建很简单。 但是指南和 API 文档说您需要只需要一个数据源。因此,由于我有 2 个或更多,我收到以下错误:
2020-07-21 21:38:59.134 ERROR 171262 --- [ restartedMain] o.s.b.web.embedded.tomcat.TomcatStarter :
Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException.
Message: Error creating bean with name 'sessionRepositoryFilterRegistration' defined in class path resource
[org/springframework/boot/autoconfigure/session/SessionRepositoryFilterConfiguration.class]:
Unsatisfied dependency expressed through method 'sessionRepositoryFilterRegistration' parameter 1;
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with
name 'org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration':
Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException:
No qualifying bean of type 'javax.sql.DataSource' available:
expected single matching bean but found 2: authModelDs,secureSessionDS
所以由于它无法决定使用哪一个,所以我必须手动配置它,除了整个过程将您带到一个名为
的类
org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration,在给定需要设置您自己的数据源的情况下,它实际上是不可配置的。
我看了一圈,没有办法配置会话过滤器,一旦创建它来替换那里的数据源。
所以我很困惑:如何为配置的 Spring-Session 设置正确的数据源?
任何帮助将不胜感激。
【问题讨论】:
-
尝试将其中一个数据源标记为
@Primary或@Qualifier注入的实例,以便Spring 可以在注入时解析使用哪一个。 -
谢谢 Andrew S,我也使用了这些资源。在 Spring-Boot 中创建 Session 的工作相当深入。在某些时候,一个名为 JdbcHttpSessionConfiguration 的类会设置数据源,它会获取 [所有可用的] 数据源,即使我声明一个且只有一个作为主要数据源。因此,由于它找到 2 个或更多,它会引发错误。我的任务是告诉 JdbcHttpSessionConfiguration 加载特定的数据源。我现在很忙,我相信我很快就会找到答案。
-
我将添加一些额外的堆栈跟踪 - org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有可用的“javax.sql.DataSource”类型的合格 bean:预期的单个匹配 bean,但找到了 2: authModelDs,secureSessionDS at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:220) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1282)
标签: java spring-boot session jdbc