• 转 Spring Boot之No session repository could be auto-configured, check your configuration问题解决


    1.  环境介绍

         JDK 1.8  Spring-Boot 1.5.1.RELEASE, STS IDE

    2.  问题的提出

         创建了一个非常简约的Spring Boot Web Application,其中使用了Spring-Session,具体的maven依赖如下: 

    [html] view plain copy
    1.   <dependency>  
    2. <groupId>org.springframework.session</groupId>  
    3. <artifactId>spring-session</artifactId>  
    4. lt;/dependency>  

        在启动过程中,出现了如下错误信息:

    [html] view plain copy
    1. Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.  
    2. 2017-02-23 17:48:10.710 ERROR 29484 --- [  restartedMain] o.s.boot.SpringApplication               : Application startup failed  
    3.   
    4. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.session.SessionAutoConfiguration$SessionRepositoryValidator': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No session repository could be auto-configured, check your configuration (session store type is 'null')  
    5.     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137)  
    6.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)  
    7.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)  
    8.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)  
    9.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)  
    10.     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)  
    11.     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)  
    12.     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)  
    13.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)  
    14.     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)  
    15.     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)  
    16.     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)  
    17.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)  
    18.     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)  
    19.     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)  
    20.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)  
    21.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)  
    22.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)  
    23.     at org.rosebird.data.stock.StockdataApplication.main(StockdataApplication.java:10)  
    24.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    25.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
    26.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
    27.     at java.lang.reflect.Method.invoke(Method.java:497)  
    28.     at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)  
    29. Caused by: java.lang.IllegalArgumentException: No session repository could be auto-configured, check your configuration (session store type is 'null')  
    30.     at org.springframework.util.Assert.notNull(Assert.java:115)  
    31.     at org.springframework.boot.autoconfigure.session.SessionAutoConfiguration$SessionRepositoryValidator.checkSessionRepository(SessionAutoConfiguration.java:100)  
    32.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    33.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
    34.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
    35.     at java.lang.reflect.Method.invoke(Method.java:497)  
    36.     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)  
    37.     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)  
    38.     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)  
    39.     ... 23 common frames omitted  

         异常栈很长,关键的错误信息是:No session repository could be auto-configured, check your configuration (session store type is 'null'),这个信息对于我们进行问题分析提供了非常大的指引, 我们将重点放在session store type的功能分析上。

    3.  问题的解决与分析

         在网上搜索之后,我们发现session store type使用来存放session的存储方式,目前Spring boot中只支持redis方式。 由于本应用暂无需将session放入redis的需求,故这里就可以将session store type设置为none.

        这里我们将此配置信息放入application.properites之中:

    [html] view plain copy
    1. # default-store in spring session. it will be set in redis only outside.  
    2. spring.session.store-type=none  

      重新启动应用,错误信息消失, 我们可以看到了启动正常的信息了:

    [html] view plain copy
      1. 2017-02-23 19:36:17.437  INFO 10500 --- [  restartedMain] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: OrRequestMatcher [requestMatchers=[Ant [pattern='/css/**'], Ant [pattern='/js/**'], Ant [pattern='/images/**'], Ant [pattern='/webjars/**'], Ant [pattern='/**/favicon.ico'], Ant [pattern='/error']]], []  
      2. 2017-02-23 19:36:17.823  INFO 10500 --- [  restartedMain] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: OrRequestMatcher [requestMatchers=[Ant [pattern='/**']]], [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6c7bc3c3, org.springframework.security.web.context.SecurityContextPersistenceFilter@7e251380, org.springframework.security.web.header.HeaderWriterFilter@d2c9b20, org.springframework.security.web.authentication.logout.LogoutFilter@32d5aa81, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@57b802cf, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@6a11f15, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@510cb143, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@69e3d43f, org.springframework.security.web.session.SessionManagementFilter@182c322e, org.springframework.security.web.access.ExceptionTranslationFilter@72545397, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@7c8a6e92]  
      3. 2017-02-23 19:36:18.163  INFO 10500 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729  
      4. 2017-02-23 19:36:18.346  INFO 10500 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup  
      5. 2017-02-23 19:36:18.570  INFO 10500 --- [  restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)  
      6. 2017-02-23 19:36:18.588  INFO 10500 --- [  restartedMain] o.r.data.stock.StockdataApplication      : Started StockdataApplication in 25.393 seconds (JVM running for 27.444)  
  • 相关阅读:
    如何彻底卸载Oracle11g
    Oracle 11g的安装
    python 循环队列的实现
    numpy模块学习笔记
    Python 进程之间共享数据
    python异步加协程获取比特币市场信息
    MySQL中, 如何查询某一天, 某一月, 某一年的数据.
    js获取时间
    nodejs爬虫笔记(五)---利用nightmare模拟点击下一页
    nodejs爬虫笔记(四)---利用nightmare解决加载更多问题
  • 原文地址:https://www.cnblogs.com/xingzc/p/7561548.html
Copyright © 2020-2023  润新知