【问题标题】:using spring session with spring 3.1.2 not working使用 spring 会话与 spring 3.1.2 不工作
【发布时间】:2016-10-15 14:45:17
【问题描述】:

我想在我当前的 spring 3.1.2 项目中使用 spring session mongo,但失败了。 我的 POM 依赖是这样的:

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.1.2.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session</artifactId>
            <version>1.3.0.M2</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-mongo</artifactId>
            <version>1.2.2.RELEASE</version>
            <type>pom</type>
        </dependency>

而我的配置是:

@Configuration
@EnableMongoHttpSession
public class HttpSessionConfig extends AbstractMongoConfiguration {

    @Value("${mongo-url}")
    String mongo_url;

    @Bean
    public JdkMongoSessionConverter jdkMongoSessionConverter() {
            return new JdkMongoSessionConverter(); 
    }


    @Bean
    public Mongo mongo() throws UnknownHostException {
        String url = mongo_url;
        ArrayList<ServerAddress> addr = new ArrayList<ServerAddress>();
        for (String s : url.split(",")) {
            addr.add(new ServerAddress(s));
        }
        Mongo mongo = new Mongo(addr);
        return mongo;
    }

    public @Bean MongoTemplate mongoTemplate() throws UnknownHostException {
        return new MongoTemplate(mongo(), "mydb");
    }



    @Override
    protected String getDatabaseName() {
        return "mydb";
    }
}

问题是在我开始这个项目之后使用:

mvn tomcat7:运行,

我收到这样的错误:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.IllegalStateException: Cannot load configuration class: org.springframework.security.saml.web.HttpSessionConfig
at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:346)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:222)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:686)

spring-session 是否仅适用于 spring4 及更高版本?我该如何解决这个问题?

谢谢

更新: 我将版本更改为 3.2.14.RELEASE:

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.2.14.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.2.14.RELEASE</version>
            <scope>compile</scope>
        </dependency>
         <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-mongo</artifactId>
                <version>1.2.2.RELEASE</version>
                <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
            <version>1.2.2.RELEASE</version>    
        </dependency>

还有这个的配置:

@Configuration
@EnableMongoHttpSession
public class HttpSessionConfig extends AbstractMongoConfiguration {

    //@Value("${mongo-url}")
    String mongo_url;

    @Bean
    public JdkMongoSessionConverter jdkMongoSessionConverter() {
            return new JdkMongoSessionConverter(); 
    }


    @Bean
    public Mongo mongo() throws UnknownHostException {
        mongo_url = "127.0.0.1:27017";// "dev-ngcsc:27017,dev1-ngcsc:27017,dev2-ngcsc:27017";
        String url = mongo_url;
        ArrayList<ServerAddress> addr = new ArrayList<ServerAddress>();
        for (String s : url.split(",")) {
            addr.add(new ServerAddress(s));
        }
        Mongo mongo = new Mongo(addr);
        return mongo;
    }

    public @Bean MongoTemplate mongoTemplate() throws UnknownHostException {
        return new MongoTemplate(mongo(), "ngcsc");
    }



    @Override
    protected String getDatabaseName() {
        return "ngcsc";
    }
}

现在我得到了这个错误:

Oct 15, 2016 8:15:55 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mongoSessionRepository' defined in class org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.data.mongodb.core.MongoOperations]: : Error creating bean with name 'mongoTemplate' defined in class path resource [org/springframework/security/saml/web/HttpSessionConfig.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.data.mongodb.core.MongoTemplate org.springframework.security.saml.web.HttpSessionConfig.mongoTemplate() throws java.net.UnknownHostException] threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/objenesis/ObjenesisStd; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoTemplate' defined in class path resource [org/springframework/security/saml/web/HttpSessionConfig.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.data.mongodb.core.MongoTemplate org.springframework.security.saml.web.HttpSessionConfig.mongoTemplate() throws java.net.UnknownHostException] threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/objenesis/ObjenesisStd

似乎是 mongo 问题,有什么想法可以改进吗?

我已经将版本升级到4,但另一个问题是这样的:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springSessionRepositoryFilter' defined in class path resource [org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfiguration.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.session.SessionRepository]: : No qualifying bean of type [org.springframework.session.SessionRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.session.SessionRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

我错过了任何 bean 定义吗?

【问题讨论】:

  • 为什么要用这么古老的Spring版本?

标签: spring mongodb spring-3 spring-session


【解决方案1】:

引用自文档

如果您正在使用其他 Spring 库(不是必需的),则最低 所需版本是 Spring 3.2.14。当我们重新运行所有单元测试时 针对 Spring 3.2.x,我们建议使用最新的 Spring 4.x 版本 尽可能。

spring-session documentation

【讨论】:

  • 我已经将版本更新到3.2.14,现在mongo问题来了,你能帮忙吗?
  • 我不确定spring-boot-starter-data-mongo会使用哪个spring data mongodb版本。 spring 页面上最旧的 spring-data-mongo 版本说 4.0.x 见docs.spring.io/spring-data/data-mongo/docs/1.8.6.RELEASE/…
  • 我已经升级到 4,并且某些会话依赖项丢失,如上粘贴错误,知道吗?
猜你喜欢
  • 1970-01-01
  • 2015-03-27
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
相关资源
最近更新 更多