簡體   English   中英

NoSuchBeanDefinitionException: 沒有可用的“javax.servlet.Filter”類型的合格 bean

[英]NoSuchBeanDefinitionException: No qualifying bean of type 'javax.servlet.Filter' available

Eureka Server - Camden.SR2 - Spring Boot Starter 1.4.2.RELEASE

嘗試使用 Eureka 服務器運行 Spring Boot Starter 1.4.2.RELEASE 時出現以下錯誤:

2016-11-21 22:33:53.420  INFO 20635 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2177849e: startup date [Mon Nov 21 22:33:53 CET 2016]; root of context hierarchy
2016-11-21 22:33:53.836  INFO 20635 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2016-11-21 22:33:53.894  INFO 20635 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [class org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$fc4b31a3] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.4.2.RELEASE)

2016-11-21 22:33:59.402  INFO 20635 --- [           main] i.v.p.s.EurekaServerApplication          : No active profile set, falling back to default profiles: default
2016-11-21 22:33:59.422  INFO 20635 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5c18016b: startup date [Mon Nov 21 22:33:59 CET 2016]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2177849e
2016-11-21 22:34:00.348  WARN 20635 --- [           main] o.s.c.a.ConfigurationClassPostProcessor  : Cannot enhance @Configuration bean definition 'refreshScope' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
2016-11-21 22:34:00.655  INFO 20635 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=e1bdaab3-6fb3-3c45-9078-5ee488116098
2016-11-21 22:34:00.772  INFO 20635 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2016-11-21 22:34:00.936  INFO 20635 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [class org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$fc4b31a3] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2016-11-21 22:34:01.378  INFO 20635 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8761 (http)
2016-11-21 22:34:01.397  INFO 20635 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-11-21 22:34:01.399  INFO 20635 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.6
2016-11-21 22:34:01.589  INFO 20635 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-11-21 22:34:01.590  INFO 20635 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2168 ms
2016-11-21 22:34:02.107 ERROR 20635 --- [ost-startStop-1] o.s.b.c.embedded.tomcat.TomcatStarter    : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'traceFilterRegistration' defined in org.springframework.cloud.netflix.eureka.server.EurekaServerConfiguration: Unsatisfied dependency expressed through method 'traceFilterRegistration' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.servlet.Filter' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=webRequestLoggingFilter)}
2016-11-21 22:34:02.141  WARN 20635 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
2016-11-21 22:34:02.315 ERROR 20635 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

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

Description:

Parameter 0 of method traceFilterRegistration in org.springframework.cloud.netflix.eureka.server.EurekaServerConfiguration required a bean of type 'javax.servlet.Filter' that could not be found.
    - Bean method 'resourceUrlEncodingFilter' in 'FreeMarkerAutoConfiguration.FreeMarkerWebConfiguration' not loaded because @ConditionalOnEnabledResourceChain did not find class org.webjars.WebJarAssetLocator


Action:

Consider revisiting the conditions above or defining a bean of type 'javax.servlet.Filter' in your configuration.

pom.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.spring.microservices</groupId>
    <artifactId>EurekaServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>EurekaServer</name>
    <description>Eureka discovery server example</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

應用程序.yml :

server:
  port: 8761
spring:
  application:
    name: eureka-server1
eureka:
  client:
    registerWithEureka: false
    fetch-registry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

啟動應用程序類

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

注意:如果我將spring-boot-starter-parent設置為 1.4.1.RELEASE 一切正常。


這是我的環境:

  • MacOS 塞拉利昂 10.12.1
  • Spring Tool Suite - 版本:3.8.2.RELEASE(構建 ID:201610040743 - 平台:Eclipse Neon.1 (4.6.1))

spring boot 和 spring cloud 之間應該存在不匹配的版本。 如果您使用 spring boot 版本 2.2.0.RELEASE,則必須使用 spring cloud 版本 Hoxton.RC1。 如果使用spring boot 2.1.9.RELEASE版本,則必須使用spring cloud版本Greenwich.SR3。

下面是示例:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>

在 GitHub 上打開了一個問題: #1491

通過清理 maven repo 解決: rm -r $HOME/.m2

我能夠通過調整我的 spring-boot 和 spring-cloud 版本來解決這個問題,特別是spring-boot-starter-parentspring-cloud-dependencies

為了查看這些的最新兼容版本,我使用SpringInitializr創建了一個eureka服務器項目,然后查看了生成的 pom.xml。

從上面的鏈接創建一個尤里卡項目:

  • 選擇spring boot版本(我用的是最新的)
  • 在依賴項中輸入“eureka”並選擇 eureka-server

單擊“探索”按鈕查看生成的 pom.xml。

你可以創建這個bean:

@Bean
public Filter webRequestLoggingFilter() {
    return new CommonsRequestLoggingFilter();
}

我將 <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version> 更改為 <spring-cloud.version>Hoxton.SR8</spring-cloud.version> 並且工作正常。

您可以通過匹配 Spring Boot 和 Spring Cloud 的版本來解決(Spring Boot + Spring Cloud)帶來的許多問題。 請參閱此鏈接以獲取版本矩陣。 https://spring.io/projects/spring-cloud

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM