59.4. Camel 컨텍스트 구성

기본 CamelContext 빈의 이름만 변경하려면 Camel CDI에서 제공하는 @ContextName 한정자를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

@ContextName("camel-context")
class MyRouteBean extends RouteBuilder {
 
    @Override
    public void configure() {
        from("jms:invoices").to("file:/invoices");
    }
}

사용자 지정이 필요한 경우 CamelContext 클래스를 사용하여 사용자 지정 Camel 컨텍스트 빈을 선언할 수 있습니다. 그런 다음 @PostConstruct 및 @PreDestroy 라이프사이클 콜백을 수행하여 사용자 지정을 수행할 수 있습니다. 예를 들면 다음과 같습니다.

@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {

    @PostConstruct
    void customize() {
        // Set the Camel context name
        setName("custom");
        // Disable JMX
        disableJMX();
    }

    @PreDestroy
    void cleanUp() {
        // ...
    }
}

Producer 및 disposer 메서드를 사용하여 Camel 컨텍스트 빈을 사용자 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

class CamelContextFactory {

    @Produces
    @ApplicationScoped
    CamelContext customize() {
        DefaultCamelContext context = new DefaultCamelContext();
        context.setName("custom");
        return context;
    }

    void cleanUp(@Disposes CamelContext context) {
        // ...
    }
}

마찬가지로 producer 필드를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

@Produces
@ApplicationScoped
CamelContext context = new CustomCamelContext();

class CustomCamelContext extends DefaultCamelContext {

    CustomCamelContext() {
        setName("custom");
    }
}

예를 들어, setAutoStartup 메서드를 호출하여 컨테이너가 초기화될 때 Camel 컨텍스트 경로가 자동으로 시작되지 않도록 하는 등의 방법으로 이 패턴을 사용할 수 있습니다.

@ApplicationScoped
class ManualStartupCamelContext extends DefaultCamelContext {

    @PostConstruct
    void manual() {
        setAutoStartup(false);
    }
}