当前位置: 首页 > 知识库问答 >
问题:

无法在Mongodb中配置Java Spring启动数据会话

苏凯
2023-03-14

我一直在使用此指南与mongoDB设置Spring会话数据

https://docs.spring.io/spring-session-data-mongodb/docs/2.1.1.RELEASE/reference/htmlsingle/#introduction

然而,我有配置问题。我将mongodb与Spring boot一起使用,并尝试为Spring boot web应用程序配置我的会话时间和会话名称,但它一直默认为30分钟,Mongodb中的集合名称仍然是“sessions”

这些是我尝试过的:

将这些添加到application.properties:

server.session.timeout=1
spring.session.mongodb.collection-name=TestSESSIONS

还有这个

server.servlet.session.timeout=60s
spring.session.mongodb.collection-name=TestSESSIONS

这些配置都不起作用

我在这个URL上查看了mongodb的spring公共应用程序属性,但是没有一个帮助配置mongodb的会话时间和集合名称。

在做了几个小时的研究后,看起来Spring boot使用了某种自动配置"org.springframework.boot.autoconfigure"

然后我把这个加进了我的application.properties

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration

禁用自动配置。

但现在它只是给我这个错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method mongoSessionRepository in org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration required a bean of type 'org.springframework.data.mongodb.core.MongoOperations' that could not be found.

The following candidates were found but could not be injected:
    - Bean method 'mongoTemplate' in 'MongoDataAutoConfiguration' not loaded because AnyNestedCondition 0 matched 2 did not; NestedCondition on MongoDataAutoConfiguration.AnyMongoClientAvailable.FallbackClientAvailable @ConditionalOnBean (types: com.mongodb.client.MongoClient; SearchStrategy: all) did not find any beans of type com.mongodb.client.MongoClient; NestedCondition on MongoDataAutoConfiguration.AnyMongoClientAvailable.PreferredClientAvailable @ConditionalOnBean (types: com.mongodb.MongoClient; SearchStrategy: all) did not find any beans of type com.mongodb.MongoClient


Action:

Consider revisiting the entries above or defining a bean of type 'org.springframework.data.mongodb.core.MongoOperations' in your configuration.

这是来自 spring.io 指南“mongoSessionConverter”的@bean,来自上面的链接

这是java文件MongoHttpSession配置从Spring,这是由Spring自动配置的;我尝试过扩展“MongoHttpSessionConfiguration”并覆盖我自己的setter方法。例如,“setMaxInactiveIntervalInSeconds”表示 sessionTime,“setCollectionName”表示 mongododb 数据库集合名称。但我有这个错误:

Description:

The bean 'mongoSessionRepository', defined in class path resource [com/khatpass/app/config/SessionListenerConfig.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfiguration.class] and overriding is disabled.

我坚持尝试使用MongoDB配置Spring启动会话。会话总是默认为30分钟,并且集合名称始终是mongob集合中的“会话”。不确定如何更改serverSelectionTimeout='30000 ms'和mongob集合名称“会话”我不知道该怎么办,需要帮助。

2019-02-24 13:39:54.501  INFO 36113 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}

共有2个答案

刘星火
2023-03-14

在从 org.springframework.session.data.mongo 查看了类 MongoOperationsSessionRepository 之后,似乎无法通过 application.properties 进行配置,因为该类使用的是静态最终值。

public static final int DEFAULT_INACTIVE_INTERVAL = 1800;

public static final String DEFAULT_COLLECTION_NAME = "sessions";

更改该值的唯一方法是在保存对象之前拦截该对象。这些字段没有getter或setter,不能以简单的方式进行更改,真是个笑话!

越风史
2023-03-14

在做了这么多研究之后,最后,通过查看源代码,我找到了解决方案:

@EnableMongoHttpSession(maxInactiveIntervalInSeconds = 24 * 60 * 60)
public class SessionConfiguration {}

要覆盖默认的集合名称,还有另一个注释属性ColltionName

这适用于Spring Boot 2.1.1

 类似资料:
  • 我在mac os big Sur上。我完全重新安装了java、jdk和NetBeans。它开始了,但是当我试图安装插件时,我得到了一条错误消息,上面写着“jdk丢失,需要运行一些netbeans模块”。在此之后,我将netbeans_jdkhome设置为我的jdk位置。现在我的netbeans甚至无法打开(最新版本)

  • 我在我的Ubuntu VM上安装了Hive和Hadoop。 当我在终端上启动时,我会得到以下信息: SLF4J:类路径包含多个SLF4J绑定。slf4j:在[jar:file:/opt/apache-hive-2.3.5-bin/lib/log4j-Slf4j-impl-2.6.2.jar!/org/slf4j/impl/staticloggerbinder.class]中找到绑定slf4j:在[

  • 我的项目使用MySQL、JavaFX、Spring Boot、Spring Data JP和Hibernate框架/技术。 这是我的POM文件。 这是我的。属性配置。 这是我的主课 这是stacktrace: 上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatifiedPendencyException:创建名为“org”的bean时出错。sprin

  • 我正试图使用Appium从mac上的Android应用程序启动我的应用程序。应用程序 或使用我的代码,但我得到一个错误 无法启动新会话。 确保Appium服务器运行的应用程序是通过使用Appium中的“App Path”参数打开的。应用程序(以及适用于Android的软件包和 活动)或通过连接selenium客户端,并 在所需的功能对象中提供此功能。" 下面是我的Appium日志,我在这里做错了什

  • 我正在尝试使用selenium java代码打开firefox浏览器。 Selenium服务器已启动并正在运行。我尝试使用命令提示符更改selenium服务器端口,并在代码中设置端口,但两者都不起作用。 在错误消息“连接到localhost:6544”中,它每次都试图连接到不同的localhost。有人能看出问题出在哪里吗? 我使用的版本有: firefox 48.0 另外,我的geckodriv

  • 我有我的巴蒂斯 xml config 我有依赖关系 我有存储库 但是当我尝试构建priject时,我出错了。 描述: 无法确定数据库类型 NONE 的嵌入式数据库驱动程序类 行动: 如果你想要一个嵌入式数据库,请在类路径上放置一个受支持的数据库。如果要从特定配置文件加载数据库设置,则可能需要激活它(当前没有配置文件处于活动状态)。 我怎么设置SqlMapConfig.xml? 我尝试在行中写入 但