1.2. Spring Boot


Spring Boot가 Camel을 자동으로 구성합니다. Spring 컨텍스트에서 사용 가능한 Camel 경로의 자동 구성 자동 구성 및 Camel 유틸리티(예: 생산자 템플릿, 소비자 템플릿, 유형 변환기 등)를 빈으로 등록합니다.

Maven 사용자는 이 구성 요소를 사용하려면 pom.xml 에 다음 종속성을 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-spring-boot</artifactId>
    <version>3.20.1.redhat-00064</version> <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

Camel-spring-bootspring.factories 파일과 함께 제공되므로 해당 종속성을 클래스 경로에 추가하면 Spring Boot가 Camel을 자동으로 자동으로 설정합니다.

1.2.1. Camel Spring Boot Starter

Apache Camel은 시작자를 사용하여 Spring Boot 애플리케이션을 개발할 수 있는 Spring Boot Starter 모듈을 제공합니다. 소스 코드에도 샘플 애플리케이션이 있습니다.

시작기를 사용하려면 Spring 부팅 pom.xml 파일에 다음을 추가합니다.

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-spring-boot-bom</artifactId>
    <version>3.20.1.redhat-00064</version> <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

그런 다음 Camel 경로를 사용하여 다음과 같은 클래스를 추가할 수 있습니다.

package com.example;

import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class MyRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("timer:foo").to("log:bar");
    }
}
Copy to Clipboard Toggle word wrap

그러면 이러한 경로가 자동으로 시작됩니다.

application.properties 또는 application.yml 파일에서 Camel 애플리케이션을 사용자 지정할 수 있습니다.

1.2.2. Spring Boot 자동 구성

Spring Boot와 함께 Spring-boot를 사용하는 경우 다음과 같은 Maven 종속성을 사용하여 자동 구성을 지원해야 합니다.

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-spring-boot-starter</artifactId>
  <version>3.20.1.redhat-00064</version> <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

1.2.3. 자동 구성된 Camel 컨텍스트

Camel 자동 구성에서 제공하는 가장 중요한 기능은 CamelContext 인스턴스입니다. Camel 자동 구성에서는 SpringCamelContext 를 생성하고 해당 컨텍스트의 적절한 초기화 및 종료를 처리합니다. 생성된 Camel 컨텍스트는 Spring 애플리케이션 컨텍스트( camelContext console 이름 아래)에도 등록되므로 다른 Spring console처럼 액세스할 수 있습니다.

@Configuration
public class MyAppConfig {

  @Autowired
  CamelContext camelContext;

  @Bean
  MyService myService() {
    return new DefaultMyService(camelContext);
  }

}
Copy to Clipboard Toggle word wrap

1.2.4. Camel 경로 자동 감지

Camel 자동 구성에서는 Spring 컨텍스트에서 모든 RouteBuilder 인스턴스를 수집하여 제공된 CamelContext 에 자동으로 삽입합니다. 즉, Spring Boot starter를 사용하여 새 Camel 경로를 생성하는 것은 @Component 주석이 달린 클래스를 classpath에 추가하는 것처럼 간단합니다.

@Component
public class MyRouter extends RouteBuilder {

  @Override
  public void configure() throws Exception {
    from("jms:invoices").to("file:/invoices");
  }

}
Copy to Clipboard Toggle word wrap

또는 @Configuration 클래스에서 새 경로 RouteBuilder 빈을 생성합니다.

@Configuration
public class MyRouterConfiguration {

  @Bean
  RoutesBuilder myRouter() {
    return new RouteBuilder() {

      @Override
      public void configure() throws Exception {
        from("jms:invoices").to("file:/invoices");
      }

    };
  }

}
Copy to Clipboard Toggle word wrap

1.2.5. Camel 속성

Spring Boot 자동 구성은 Camel 속성을 지원하는 속성 자리 표시자, OS 환경 변수 또는 시스템 속성을 포함할 수 있는 Spring Boot 외부 구성에 자동으로 연결됩니다. 기본적으로 application.properties 파일에 정의된 모든 속성을 의미합니다.

route.from = jms:invoices
Copy to Clipboard Toggle word wrap

또는 시스템 속성을 통해 설정:

java -Droute.to=jms:processed.invoices -jar mySpringApp.jar
Copy to Clipboard Toggle word wrap

Camel 경로에서 자리 표시자로 사용할 수 있습니다.

@Component
public class MyRouter extends RouteBuilder {

  @Override
  public void configure() throws Exception {
    from("{{route.from}}").to("{{route.to}}");
  }

}
Copy to Clipboard Toggle word wrap

1.2.6. 사용자 정의 Camel 컨텍스트 구성

Camel 자동 구성으로 생성된 CamelContext console에서 일부 작업을 수행하려면 Spring 컨텍스트에서 CamelContextConfiguration 인스턴스를 등록합니다.

@Configuration
public class MyAppConfig {

  @Bean
  CamelContextConfiguration contextConfiguration() {
    return new CamelContextConfiguration() {
      @Override
      void beforeApplicationStart(CamelContext context) {
        // your custom configuration goes here
      }
    };
  }

}
Copy to Clipboard Toggle word wrap

beforeApplicationStart 방법은 Spring 컨텍스트가 시작되기 직전에 호출되므로 이 콜백에 전달된 CamelContext 인스턴스는 완전히 자동 구성됩니다. CamelContextConfiguration 의 인스턴스를 Spring 컨텍스트에 여러 개 추가하면 각 인스턴스가 실행됩니다.

1.2.7. 자동 구성된 소비자 및 생산자 템플릿

Camel 자동 구성에서는 사전 구성된 ConsumerTemplateProducerTemplate 인스턴스를 제공합니다. Spring 관리 빈에 삽입할 수 있습니다.

@Component
public class InvoiceProcessor {

  @Autowired
  private ProducerTemplate producerTemplate;

  @Autowired
  private ConsumerTemplate consumerTemplate;

  public void processNextInvoice() {
    Invoice invoice = consumerTemplate.receiveBody("jms:invoices", Invoice.class);
    ...
    producerTemplate.sendBody("netty-http:http://invoicing.com/received/" + invoice.id());
  }

}
Copy to Clipboard Toggle word wrap

기본적으로 소비자 템플릿 및 생산자 템플릿에는 1000으로 설정된 끝점 캐시 크기가 함께 제공됩니다. 다음 Spring 속성을 수정하여 이러한 값을 변경할 수 있습니다.

camel.springboot.consumer-template-cache-size = 100
camel.springboot.producer-template-cache-size = 200
Copy to Clipboard Toggle word wrap

1.2.8. 자동 구성된 TypeConverter

Camel 자동 구성에서는 Spring 컨텍스트에서 typeConverter 라는 TypeConverter 인스턴스를 등록합니다.

@Component
public class InvoiceProcessor {

  @Autowired
  private TypeConverter typeConverter;

  public long parseInvoiceValue(Invoice invoice) {
    String invoiceValue = invoice.grossValue();
    return typeConverter.convertTo(Long.class, invoiceValue);
  }

}
Copy to Clipboard Toggle word wrap

1.2.8.1. Spring 유형 변환 API 브리지

Spring은 강력한 유형 변환 API 와 함께 제공됩니다. Spring API는 Camel 유형 변환기 API와 유사합니다. 두 API 모두 매우 유사하므로 Camel Spring Boot는 Spring 변환 API에 위임하는 브리지 변환기(SpringTypeConverter)를 자동으로 등록합니다. 이는 즉시 사용 가능한 Camel이 Camel과 같은 Spring gRPC를 처리하는 것을 의미합니다. 이 방법을 사용하면 Camel TypeConverter API를 통해 액세스하는 Camel 및 Spring 변환기를 모두 사용할 수 있습니다.

@Component
public class InvoiceProcessor {

  @Autowired
  private TypeConverter typeConverter;

  public UUID parseInvoiceId(Invoice invoice) {
    // Using Spring's StringToUUIDConverter
    UUID id = invoice.typeConverter.convertTo(UUID.class, invoice.getId());
  }

}
Copy to Clipboard Toggle word wrap

Camel Spring Boot가 애플리케이션 컨텍스트에서 사용 가능한 Spring의 ConversionService 인스턴스로 변환을 위임합니다. ConversionService 인스턴스를 사용할 수 없는 경우 Camel Spring Boot 자동 구성이 자동으로 생성됩니다.

1.2.9. 애플리케이션 활성 상태 유지

이 기능을 사용할 수 있는 Camel 애플리케이션은 JVM 종료를 방지하여 애플리케이션을 활성 상태로 유지하기 위한 목적으로 시작할 때 새로운 스레드를 시작합니다. 즉, Spring Boot로 Camel 애플리케이션을 시작한 후 애플리케이션이 Ctrl+C 신호를 대기하고 즉시 종료되지 않습니다.

컨트롤러 스레드는 camel.springboot.main-run-controller 를 사용하여 true 로 활성화할 수 있습니다.

camel.springboot.main-run-controller = true
Copy to Clipboard Toggle word wrap

웹 모듈을 사용하는 애플리케이션(예: org.springframework.boot:spring-boot-web-starter 모듈을 가져오는 애플리케이션)은 일반적으로 다른 비daemon 스레드의 존재에 의해 유지되기 때문에 이 기능을 사용할 필요가 없습니다.

1.2.10. XML 경로 추가

기본적으로 Camel XML 경로를 디렉토리 camel 아래의 classpath에 배치할 수 있습니다. 이 경로는 camel-spring-boot가 자동으로 감지되고 다음을 포함합니다. 구성 옵션을 사용하여 디렉터리 이름을 구성하거나 이 해제를 해제할 수 있습니다.

# turn off
camel.springboot.routes-include-pattern = false
Copy to Clipboard Toggle word wrap
# scan only in the com/foo/routes classpath
camel.springboot.routes-include-pattern = classpath:com/foo/routes/*.xml
Copy to Clipboard Toggle word wrap

XML 파일은 다음과 같은 Camel XML 경로(< CamelContext>아님 )여야 합니다.

<routes xmlns="http://camel.apache.org/schema/spring">
    <route id="test">
        <from uri="timer://trigger"/>
        <transform>
            <simple>ref:myBean</simple>
        </transform>
        <to uri="log:out"/>
    </route>
</routes>
Copy to Clipboard Toggle word wrap

1.2.11. JUnit 5 방식으로 테스트

테스트를 위해 Maven 사용자는 pom.xml 에 다음 종속성을 추가해야 합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.7.12</version> <!-- Use the same version as your Spring Boot version -->
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-test-spring-junit5</artifactId>
    <version>3.20.1.redhat-00031</version> <!-- use the same version as your Camel core version -->
    <scope>test</scope>
</dependency>
Copy to Clipboard Toggle word wrap

Camel Spring Boot 애플리케이션을 테스트하려면 @CamelSpringBootTest 로 테스트 클래스에 주석을 답니다. 이를 통해 Camel의 Spring Test 지원이 애플리케이션에 적용되어 Spring Boot 테스트 규칙을 사용하여 테스트를 작성할 수 있습니다.

CamelContext 또는 ProducerTemplate 을 얻으려면 @Autowired 를 사용하여 일반 Spring 방식으로 클래스에 주입할 수 있습니다.

또한 camel-test-spring-junit5 를 사용하여 테스트를 선언적으로 구성할 수도 있습니다. 이 예에서는 @MockEndpoints 주석을 사용하여 끝점을 자동 삽입합니다.

@CamelSpringBootTest
@SpringBootApplication
@MockEndpoints("direct:end")
public class MyApplicationTest {

    @Autowired
    private ProducerTemplate template;

    @EndpointInject("mock:direct:end")
    private MockEndpoint mock;

    @Test
    public void testReceive() throws Exception {
        mock.expectedBodiesReceived("Hello");
        template.sendBody("direct:start", "Hello");
        mock.assertIsSatisfied();
    }

}
Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat