0

我将以下 pom.xml 设置为使用 Camel 3.14.0:

<?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/maven-v4_0_0.xsd">

   <modelVersion>4.0.0</modelVersion>
   <groupId>com.apps</groupId>
   <artifactId>MyApp</artifactId>
   <version>1.0.0</version>
   <name>MyApp Camel component</name>

   <dependencyManagement>
     <dependencies>
       <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-bom</artifactId>
         <version>3.14.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
     </dependencies>
   </dependencyManagement>
   
   
   <dependencies>
      <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-core</artifactId>
      </dependency>
      <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-csv</artifactId>
      </dependency>
   
      <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-sql</artifactId>
      </dependency>
      <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-spring</artifactId>
      </dependency>
      
   
      <!-- DB dependencies -->  
      <dependency>
          <groupId>org.hsqldb</groupId>
          <artifactId>hsqldb</artifactId>
          <version>2.6.1</version>
          <scope>system</scope>
          <systemPath>D:\Drivers\hsqldb-2.6.1-jdk8.jar</systemPath> 
      </dependency>
   </dependencies>
</project>

然后我在 Windows 中有这个命令行来收集依赖项:

C:\Users\Public\apache-maven-3.2.5\bin\mvn -f pom.xml dependency:copy-dependencies

当我运行它时,我会在目标文件夹(../build/target/dependency)中获得所有 jar。

然后我得到其他run.bat文件,如下所示:

set CLASSPATH=../build/target/dependency/*;../config/    

java -classpath "%CLASSPATH%" org.apache.camel.spring.Main

但是当我运行它时,我得到一个错误,说它找不到主类。该类是以前用例(Camel 2.10.6)中使用的类,它运行良好。您能否建议在这里参考什么是正确的课程?

编辑 1:我在文档中发现 Main 现在在 org.apache.camel.main 中,所以我在 run.bat 中配置了它,它似乎正在运行。但是现在它显示了以下内容,奇怪的是它停止从 context.xml 中配置的路径中选择文件。有任何想法吗?

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

编辑 2:我查看了错误,发现我需要包含依赖项

  <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
  </dependency>

它似乎仍然有效(关于 slf4 的消息消失了)但仍然不会从路径中选择文件。

现在,我决定迁移到最后一个 LTS 版本的原因是因为我需要使用一个组件属性,该组件属性仅在较新版本的 Camel 中可用,而不是我一直在使用的版本。所以我决定试一试最新版本,但现在我遇到了错误,说它找不到课程。

我过去在某种程度上使用过 Camel,但只是基于其他人提供的示例,从来没有从头开始,所以我根本不是专家,不幸的是我需要尽快解决这个问题。我想最简单的方法是使用 java bean,但我不是 java 开发人员,所以我认为使用 Spring XML DSL 可能没问题。我正在使用 java 1.8.0_92。

Camel 文档似乎没有像 spring xml 那样提供如此多的细节,所以任何帮助都将不胜感激。

4

1 回答 1

1

框架和文档

首先,最好理解Apache Camel是集成框架,Spring 是应用程序框架,其最显着的特性可能是依赖注入。因此,文档有点希望开发人员熟悉 spring-framework 并能够在骆驼和 spring 文档之间进行处理。

骆驼主

另一方面,Camel-main 是您可以在没有任何框架的情况下运行骆驼应用程序的工具,因此它不了解 Spring 框架。有camel-spring-main,但稍后会更多。

弹簧靴

当谈到 spring 时,使用 spring-boot 可能会更容易,您可以将其视为 maven 依赖项的集合,您可以使用它来使用默认配置自动配置 spring 应用程序。

我建议您使用camel maven archetype camel-archetype-spring-boot 创建一个新项目。这应该为您提供有关如何开始使用骆驼和弹簧的良好起点和示例。

要将 spring-xml 文件与 camel-spring-boot 一起使用,您可以@ImportResource(classpath:META-INF/spring/camel-context.xml)在 SpringBootApplication 类上添加注释(使用 注释的类@SpringBootApplication,在使用模板时命名为 MySpringBootApplication)。

更改路径以匹配 xml 文件的位置和名称,并从项目中删除或注释示例 RouteBuilder 类,以防止它被任何东西打断。

# You can run spring-boot application using maven
mvn spring-boot:run

# Alternatively you should be able to run it from jar using
java -jar application.jar

spring-boot 的缺点是它会使我们的项目充满大量额外的依赖项。例如,仅让应用程序运行模板项目使用spring-boot-start-web,spring-boot-starter-undertowspring-boot-starter-actuator依赖项。

骆驼春主

camel-archetype-spring您还可以使用原型创建没有 spring-boot 的骆驼弹簧应用程序。它使用我上面提到的 camel-spring-main 并且可以使用带有 command 的 maven 运行mvn camel:run

但是我发现这个原型有点缺乏。首先,它缺少可见的主类,如果你将它与一些骆驼原型主类进行比较,这是不一致的。其次,它的包装配置似乎存在问题,因为我没有找到从 jar 运行它的简单方法。我尝试的大多数尝试都导致ClassNotFoundExceptionorg/apache/camel/spring/Main即使是艰难的,我也拥有所有 maven 依赖项。但是,它在 IDE 中运行良好。

将您的项目转换为 JAVA-DSL 并使用 camel main

由于您的路线看起来并不那么复杂,您可以在几分钟内将其从 XML 转换为 Java-DSL,然后在没有任何应用程序框架的情况下使用 camel-main 运行它。有一个原型也称为camel-archetype-main。

于 2022-01-11T11:57:33.677 回答