【问题标题】:Error processing condition on org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfigurationorg.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration 上的错误处理条件
【发布时间】:2019-01-06 11:35:04
【问题描述】:

向我的应用程序添加如下所示的 2 个依赖项后一切正常,我的会话数据被写入我的本地 redis 服务器,但是当我尝试指定 redis 服务器的不同地址时出现错误。我认为错误与一些依赖问题有关,但我不知道如何解决这个问题。

compile "org.springframework.boot:spring-boot-starter-data-redis-reactive:${springVersion}"
compile "org.springframework.session:spring-session-data-redis:${springVersion}"

启动时出错

java.lang.IllegalStateException: 错误处理条件 on org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer 在 org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:64) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:180) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:141) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:117) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:328) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:233) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:694) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:61) ~[spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 pl.bk.pizza.store.Initializer.main(Initializer.java:11) [classes/:na] 引起:java.lang.IllegalStateException:无法自省类 [org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration] 来自 ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2] org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:659) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:556) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:569) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:599) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:724) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:665) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:633) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1489) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1012) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.addBeanTypeForNonAliasDefinition(BeanTypeRegistry.java:164) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.addBeanType(BeanTypeRegistry.java:153) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.updateTypesIfNecessary(BeanTypeRegistry.java:203) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.getNamesForType(BeanTypeRegistry.java:115) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.autoconfigure.condition.OnBeanCondition.collectBeanNamesForType(OnBeanCondition.java:265) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.autoconfigure.condition.OnBeanCondition.getBeanNamesForType(OnBeanCondition.java:254) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchingBeans(OnBeanCondition.java:196) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchOutcome(OnBeanCondition.java:116) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] 在 org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) ~[spring-boot-autoconfigure-2.0.2.RELEASE.jar:2.0.2.RELEASE] ... 17 常见框架省略引起:java.lang.NoClassDefFoundError: javax/servlet/Filter at java.lang.ClassLoader.defineClass1(Native 方法)~[na:1.8.0-internal] at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0-internal] 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0-internal] 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0-internal] 在 java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0-internal] 在 java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0-internal] 在 java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0-internal] 在 java.security.AccessController.doPrivileged(本机方法) ~[na:1.8.0-internal] 在 java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0-internal] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0-internal] 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0-internal] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0-internal] at java.lang.ClassLoader.defineClass1(Native 方法)~[na:1.8.0-internal] at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0-internal] 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0-internal] 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0-internal] 在 java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0-internal] 在 java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0-internal] 在 java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0-internal] 在 java.security.AccessController.doPrivileged(本机方法) ~[na:1.8.0-internal] 在 java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0-internal] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0-internal] 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0-internal] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0-internal] at java.lang.Class.getDeclaredMethods0(Native 方法)~[na:1.8.0-internal] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0-internal] 在 java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0-internal] 在 org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:641) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE] ... 35个常用框架 省略引起:java.lang.ClassNotFoundException: javax.servlet.Filter 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0-internal] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0-internal] 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0-internal] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0-internal] ...省略了63个常用帧

RedisConfig

@Configuration
@EnableRedisHttpSession
public class RedisConfig
{
    @Bean
    LettuceConnectionFactory jedisConnectionFactory()
    {
        final RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
            config.setHostName("redis-19999.c14.us-east-1-2.ec2.cloud.redislabs.com");
            config.setPort(19999);
            config.setPassword(RedisPassword.of("***"));
        return new LettuceConnectionFactory();
    }
}

build.gradle 文件

buildscript {
    ext.springVersion = '2.0.2.RELEASE'
    ext.gradleDocker = '1.2'
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath "se.transmode.gradle:gradle-docker:$gradleDocker"
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$springVersion"
    }
}

plugins {
    id "org.sonarqube" version "2.6.2"
}

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'groovy'
apply plugin: 'org.springframework.boot'
apply plugin: 'docker'
apply plugin: 'jacoco'

dependencies {

    // spring
    compile "org.springframework.boot:spring-boot-starter-webflux:${springVersion}"
    compile "org.springframework.boot:spring-boot-starter-data-mongodb-reactive:${springVersion}"
    compile "org.springframework.boot:spring-boot-starter-security:${springVersion}"
    testCompile "org.springframework.security:spring-security-test:${springSecurityTest}"
    testCompile "org.springframework.boot:spring-boot-starter-test:${springVersion}"
    compile "org.springframework.boot:spring-boot-starter-data-redis-reactive:${springVersion}"
    compile "org.springframework.session:spring-session-data-redis:${springVersion}"

    // utils
    testCompile "org.assertj:assertj-core:${assertJ}"
    compile "com.google.guava:guava:${guava}"
    compile "io.projectreactor:reactor-core:${reactor}"
    compile "io.reactivex.rxjava2:rxjava:${rxjava}"
    compile "commons-lang:commons-lang:${commonsLang}"
    compile "commons-validator:commons-validator:${commonsLangValidator}"
    compileOnly "org.projectlombok:lombok:${lombok}"

    // embedded mongo for tests
    testCompile "de.flapdoodle.embed:de.flapdoodle.embed.mongo:${embeddedMongo}"

    // spock
    compile "org.codehaus.groovy:groovy-all:${groovy}"
    testCompile "org.spockframework:spock-core:${spockCore}"
    testCompile "org.spockframework:spock-spring:${spockSpring}"
}

【问题讨论】:

    标签: spring-boot spring-data spring-session spring-data-redis


    【解决方案1】:

    对我来说,一切都很完美,但它仍然抛出异常-Propertyplaceholderautoconfiguration

    我刚刚尝试了 maven reload 和 project reload ,但它仍然抛出这个错误并在依赖类上显示一些红线,这是我用来导入并在我的项目文件中使用的

    刚刚关闭 IntelliJ 并再次打开项目,然后一切正常。 对你有用的话点个赞

    【讨论】:

      【解决方案2】:

      如果您通过 spring initializr 创建应用程序,将 Session 指定为依赖项,创建 @RestController 然后使用 @EnableSpringHttpSession,则会出现同样的错误消息。

      不使用@EnableSpringHttpSession,应用程序将启动和退出,没有堆栈跟踪。这看起来可能是 HttpSession 配置有问题。

      错误情况的实际原因是由于没有将Web 包含为应用程序依赖项(或implementation('org.springframework.boot:spring-boot-starter-web' 在build.gradle 中)

      【讨论】:

        【解决方案3】:

        这里发生了几件事。

        您提供的日志表明类路径中缺少 javax.servlet.Filter,而您的构建脚本和依赖项建议您构建 Spring WebFlux 应用程序。我怀疑这是由于您使用@EnableRedisHttpSession(注意HttpSession 吗?)而不是@EnableRedisWebSession 显式配置了Spring Session 的Servlet 支持。更好的是,您应该将 Spring Session 配置留给 Spring Boot 以自动配置它 - 请参阅 Spring Boot 参考手册的Spring Session dedicated section

        同样的建议(避免显式配置,依赖自动配置)适用于您的 Redis 配置,即不需要显式 LettuceConnectionFactory bean。

        此外,对于 Spring Boot,强烈建议使用它的依赖管理,而不是显式提供依赖的版本,至少对于 Spring Boot 的依赖管理所涵盖的依赖。请参阅 Boot 参考手册的 dependency managementdependency versions appendix 部分。最重要的是,您还应该强烈考虑使用 Boot 的启动器来确保所有必需的依赖项都被引入 - 请参阅 starters dedicated section

        【讨论】:

        • 你的答案是正确的。我使用了错误的注释。 Spring webflux 使用 Servlet 3.1 非阻塞 IO,因此类路径上缺少 javax.servlet.Filter 类是合理的。我还在我的代码中应用了其他关于自动配置和依赖管理的建议。谢谢。
        猜你喜欢
        • 2020-06-30
        • 2020-06-27
        • 2015-12-21
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多