318.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">
318.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>
318.2.2. Spring을 사용한 고급 구성
Spring을 사용한 CamelContext의 고급 구성에서자세한 내용을 참조하십시오.
# Java Code 사용
Java 코드를 사용하여 RouteBuilder 구현을 정의할 수 있습니다. 이들은 봄에 빈으로 정의 한 다음 카멜 컨텍스트 (예:)에서 참조 할 수 있습니다.
318.2.3. <package> 사용
Camel은 지정된 패키지에서 자동으로 경로를 검색하고 초기화할 수 있는 강력한 기능도 제공합니다. 이는 Spring 컨텍스트 정의에서 카멜 컨텍스트 정의에 태그를 추가하여 RouteBuilder 구현을 재귀적으로 검색할 패키지를 지정하여 구성됩니다. 1.X에서 이 기능을 사용하려면 검색해야 하는 쉼표로 구분된 패키지 목록을 지정하는 <package></package> 태그가 필요합니다.
<camelContext xmlns="http://camel.apache.org/schema/spring"> <package>org.apache.camel.spring.config.scan.route</package> </camelContext>
WARNING: 패키지 이름을 org.apache.camel
또는 이 패키지의 하위 패키지로 지정할 때는 주의해야 합니다. 이로 인해 Camel에서 해당 경로에 대한 자체 패키지를 검색하여 문제가 발생할 수 있습니다.
INFO:*이 이미 인스턴스화된 클래스*를 무시합니다. <package> 및 <packageScan>은 Spring에 의해 이미 생성된 클래스를 건너뜁니다. 따라서 경로 빌더를 Spring 8080 태그로 정의하면 해당 클래스를 건너뜁니다. < routeBuilder ref="theBeanId"/
> 또는 < contextScan
> 기능을 사용하는 빈을 포함할 수 있습니다.
318.2.4. <packageScan> 사용
Camel 2.0에서는 경로 일치와 같은 Cryostat를 사용하여 검색된 경로 클래스를 선택적으로 포함 및 제외할 수 있도록 확장되었습니다. Spring에서는 <packageScan/> 태그를 추가하여 지정됩니다. 태그는 하나 이상의 '패키지' 요소(예: 1.x와 유사)를 포함해야 하며 선택적으로 검색된 클래스의 정규화된 이름에 적용할 패턴을 지정하는 하나 이상의 'includes' 또는 'excludes' 요소가 포함되어야 합니다.
<camelContext xmlns="http://camel.apache.org/schema/spring"> <packageScan> <package>org.example.routes</package> <excludes>**.*Excluded*</excludes> <includes>**.*</includes> </packageScan> </camelContext>
포함 패턴 전에 제외 패턴이 적용됩니다. 포함 또는 제외 패턴이 정의되지 않은 경우 패키지에서 발견된 모든 경로 클래스가 반환됩니다.
위의 예에서 camel은 모든 'org.example.routes' 패키지 및 RouteBuilder 클래스의 하위 패키지를 검사합니다. 검사에서 org.example.routes에서 'MyRoute'라는 두 개의 RouteBuilders를 찾고 하위 패키지 'excludedRoute'에서 또 다른 'MyExcludedRoute'를 찾습니다. 각 클래스의 정규화된 이름은 (org.example.routes.MyRoute, org.example.routes.excluded.MyExcludedRoute) 및 include 및 exclude 패턴이 적용됩니다.
제외 패턴 *.*Excluded 는 fqcn 'org.example.routes.excluded.MyExcludedRoute' 및 veto camel from initializing과 일치합니다.
본 문서에서는 다음과 같은 Spring의 Cryo statPatternMatcher 구현을 사용하고 있습니다.
? 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.SomeExcludedRoute 또는 org.example.RouteWhichIsExcludeded와 일치합니다.
*.?? 제외됨 org.simple.IncludedRoute, org.simple.ExcludedRoute와 일치하지만 org.simple.PrecludedRoute와 일치하지 않습니다.
318.2.5. contextScan 사용
Camel 2.4부터 사용 가능
Camel에서 컨테이너 컨텍스트(예: 라우팅 빌더 인스턴스에 대한 Spring ApplicationContext
)를 스캔하도록 허용할 수 있습니다. 이를 통해 Spring < component-scan
> 기능을 사용할 수 있으며 Camel에서 스캔 프로세스에서 Spring에 의해 생성된 RouteBuilder 인스턴스를 선택할 수 있습니다.
이를 통해 Spring @Component
를 사용하여 경로에 주석을 달고 Camel에서 해당 경로를 포함할 수 있습니다.
@Component public class MyRoute extends SpringRouteBuilder { @Override public void configure() throws Exception { from("direct:start").to("mock:result"); } }
< packageScan> 설명서에서 위에서 언급한 것처럼 ANT 스타일을 포함 및 제외할 수도
있습니다.