首页 > 解决方案 > 收到错误:org.springframework.beans.factory.UnsatisfiedDependencyException

问题描述

该代码应该使用使用 Quartz 触发的 Apache Camel Route 将文件夹 1 中的内容复制到文件夹 2。当我运行程序时,我得到这些错误:'org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'springCamelApplication'的bean时出错:通过字段'camelContext'和'Caused by:org.springframework.beans表达的不满足的依赖关系.factory.BeanCreationException:在类路径资源 [org/apache/camel/spring/boot/CamelAutoConfiguration.class] 中创建名称为“camelContext”的 bean 时出错:合并 bean 定义的后处理失败;嵌套异常是 java.lang.IllegalStateException:无法从 ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@512ddf17] 内省类 [org.apache.camel.impl.DefaultCamelContext]。

public class SpringCamelApplication {

    @Autowired
    CamelContext camelContext;

    public static void main(String[] args) {
        SpringApplication.run(SpringCamelApplication.class, args);
    }

    @Bean
    public FileRouteBuilder fileRouteBuilder() throws Exception {
        FileRouteBuilder routeBuilder = new FileRouteBuilder();
        camelContext.addRoutes(routeBuilder);
        return routeBuilder;

    }
}
public class FileRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("file:R://folder1?recursive=true&noop=true&scheduler=quartz2&scheduler.cron=0 0/1 * 1/1 * ? *").process(new Processor() {

            public void process(Exchange exchange) throws Exception {
                System.out.println("transferring " + exchange.getIn().getBody());

            }
        }).to("file:R://folder2");
    }
}
    <dependencies>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-quartz2</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>

    </dependencies>

标签: javaspring-bootapache-camelquartz-scheduler

解决方案


这可能是您的 Java 版本与您的 Apache Camel 版本不兼容的问题。您是否检查过您的 Apache camel 是否支持您的 Java 版本?

Java 8 由 Camel 2.x 正式支持,可能与 Camel 3.x 一起工作,也可能不工作,而 Java 11 仅由 Camel 3.x 正式支持

见:https ://camel.apache.org/manual/latest/camel-3-migration-guide.html


推荐阅读