317.2. Camel 스키마 추가
Camel 1.x의 경우 다음 네임스페이스를 사용해야 합니다.
http://activemq.apache.org/camel/schema/spring
다음 스키마 위치:
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
schemaLocation 선언에 Camel을 추가해야 합니다.
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
XML 파일은 다음과 같습니다.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
317.2.1. camel 사용: namespace 링크 복사링크가 클립보드에 복사되었습니다!
또는 XML 선언에서 camel XSD를 참조할 수 있습니다.
xmlns:camel="http://camel.apache.org/schema/spring"
- 선언은 다음과 같습니다.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
- 그런 다음 camel: namespace 접두사를 사용하고 인라인 네임스페이스 선언을 생략할 수 있습니다.
<camel:camelContext id="camel5">
<camel:package>org.apache.camel.spring.example</camel:package>
</camel:camelContext>
317.2.2. Spring을 사용한 고급 구성 링크 복사링크가 클립보드에 복사되었습니다!
Spring을 사용한 CamelContext의 고급 구성에서자세한 내용을 참조하십시오.
$# Java 코드 사용
Java 코드를 사용하여 RouteBuilder 구현을 정의할 수 있습니다. 이러한 값은 Spring에서Beans로 정의될 수 있으며, 다음과 같이 camel 컨텍스트에서 참조할 수 있습니다.
317.2.3. 사용 링크 복사링크가 클립보드에 복사되었습니다!
Camel은 또한 지정된 패키지의 경로를 자동으로 검색하고 초기화할 수 있는 강력한 기능을 제공합니다. 이는 Spring 컨텍스트 정의의 camel 컨텍스트에 태그를 추가하여 구성된 것으로, RouteBuilder 구현을 위해 재귀적으로 검색할 패키지를 지정합니다. 1.X에서 이 기능을 사용하려면 검색해야 하는 쉼표로 구분된 패키지 목록을 지정하는 <package></package> 태그가 필요합니다.
<camelContext xmlns="http://camel.apache.org/schema/spring">
<package>org.apache.camel.spring.config.scan.route</package>
</camelContext>
경고: 패키지 이름을 org.apache.camel 또는 이 하위 패키지로 지정할 때는 주의하십시오. 이로 인해 Camel이 문제를 일으킬 수 있는 경로의 자체 패키지에서 검색할 수 있습니다.
INFO:* 이미 인스턴스화된 클래스*를 무시합니다. <package> 및 <packageScan>은 Spring 등에 의해 이미 생성된 클래스를 건너뜁니다. 따라서 경로 빌더를 SpringBean 태그로 정의하면 해당 클래스를 건너뜁니다. < routeBuilder ref="theBeanId"/ > 또는 < contextScan > 기능을 사용하여 해당Beans를 포함할 수 있습니다.
317.2.4. 사용 링크 복사링크가 클립보드에 복사되었습니다!
Camel 2.0에서는 경로 일치와 유사한 경로 일치를 사용하여 검색된 경로 클래스를 선택적으로 포함 및 제외할 수 있도록 확장되었습니다. Spring에서는 <packageScan/> 태그를 추가하여 지정합니다. 태그는 하나 이상의 '패키지' 요소(예: 1.x와 유사)를 포함해야 하며 선택적으로 검색된 클래스의 정규화된 이름에 적용할 패턴을 지정하는 하나 이상의 '포함' 또는 'excludes' 요소를 포함해야 합니다.
<camelContext xmlns="http://camel.apache.org/schema/spring">
<packageScan>
<package>org.example.routes</package>
<excludes>**.*Excluded*</excludes>
<includes>**.*</includes>
</packageScan>
</camelContext>
exclude 패턴은 include 패턴 전에 적용됩니다. 포함 또는 제외 패턴이 정의되지 않은 경우 패키지에서 검색되는 모든 Route 클래스가 반환됩니다.
위의 예에서 camel은 모든 'org.example.routes' 패키지 및 RouteBuilder 클래스에 대한 하위 패키지를 스캔합니다. 검사에서 'excluded' 하위 패키지에서 org.example.routes라는 두 개의 RouteBuilder 및 'MyExcludedRoute'를 찾습니다. 각 클래스의 정규화된 이름은 추출(org.example.routes.MyRoute, org.example.routes.excluded.MyExcludedRoute)이며 포함 및 제외 패턴이 적용됩니다.
제외 패턴 *.*Excluded 는 fqcn 'org.example.routes.excluded.MyExcludedRoute' 및 veto camel과 일치하게 됩니다.
커버 아래에서는 다음과 같이 일치하는 Spring의ECDHEP ECDHEnMatcher 구현을 사용하고 있습니다.
? matches one character
* matches zero or more characters
** matches zero or more segments of a fully qualified name
예를 들면 다음과 같습니다.
*excluded 는 org.simple.Excluded, org.apache.camel.00000000ExcludedRoute 또는 org.example.RouteWhichIsExcluded와 일치합니다.
*.?? 포함됨은 org.simple.IncludedRoute, org.simple.Excluded와 일치하지만 org.simple.PrecludedRoute와 일치하지 않음
317.2.5. contextScan 사용 링크 복사링크가 클립보드에 복사되었습니다!
Camel 2.4에서 사용 가능
Camel이 경로 빌더 인스턴스의 Spring ApplicationContext 와 같은 컨테이너 컨텍스트를 스캔하도록 허용할 수 있습니다. 이를 통해 Spring < component-scan > 기능을 사용할 수 있으며 검사 프로세스에서 Spring에서 생성한 모든 RouteBuilder 인스턴스를 Camel을 선택할 수 있습니다.
이를 통해 Spring @Component 를 사용하여 경로에 주석을 달고 Camel에 포함된 경로를 지정할 수 있습니다.
@Component
public class MyRoute extends SpringRouteBuilder {
@Override
public void configure() throws Exception {
from("direct:start").to("mock:result");
}
}
위에서 언급한 대로 < packageScan> 문서에서 언급한 것처럼 ANT 스타일을 포함 및 제외할 수도 있습니다.