Не удается настроить сеанс данных Java Spring Boot Mongodb - PullRequest
0 голосов
/ 24 февраля 2019

Я использовал это руководство для настройки данных весенней сессии с помощью mongodb

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

Однако у меня возникли проблемы с настройкой.Я использую Mongodb с загрузкой Spring и пытаюсь настроить время сеанса и имя сеанса для веб-приложения загрузки Spring, но по умолчанию оно остается равным 30 минутам, а имя коллекции в mongodb по-прежнему равно «session»

Это то, что я пробовал:

Добавил их в 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, но ничего из этого не помогло настроить время сеанса и имя коллекции для mongodb.

После нескольких часов исследованийПохоже, что при весенней загрузке с этим "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.

это @bean из руководства по spring.io 'mongoSessionConverter' сверху ссылка

этоJava-файл MongoHttpSessionConfiguration от Spring, который автоматически настраивается весной;Я попытался расширить "MongoHttpSessionConfiguration" и переопределить методы установки самостоятельно.Например, "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.Сеанс всегда по умолчанию равен 30 минутам, а имя коллекции всегда является «сеансом» в коллекциях mongodb.Не уверен, как поменять это serverSelectionTimeout='30000 ms' и в коллекциях mongodb на «сеансы». Я не знаю, что делать, нужна помощь.

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 ]

0 голосов
/ 20 июня 2019

После стольких исследований и, наконец, изучения исходного кода, я нашел решение:

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

Чтобы переопределить имя коллекции по умолчанию, есть еще один атрибут аннотации collectionName.

Это работает для Spring Boot 2.1.1

0 голосов
/ 25 февраля 2019

После просмотра класса MongoOperationsSessionRepository из org.springframework.session.data.mongo создается впечатление, что его нельзя настроить через application.properties, поскольку класс использует конечные статические значения

public static final int DEFAULT_INACTIVE_INTERVAL = 1800;

и

public static final String DEFAULT_COLLECTION_NAME = "sessions";

Единственный способ изменить значение - перехватить объект перед его сохранением.Никаких методов получения или установки для этих полей, их нельзя изменить простым способом, какая шутка!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...