59.4. Camel 上下文配置

如果您只想更改默认 CamelContext bean 的名称,您可以使用 Camel CDI 提供的 @ContextName 限定符,例如:

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

如果需要更多自定义,可以使用任何 CamelContext 类声明自定义 Camel 上下文 bean。然后,可以使用 @PostConstruct 和 @PreDestroy 生命周期回调来进行自定义,例如:

@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {

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

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

生产者 和配方方法还可用来自定义 Camel 上下文 bean,例如: http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#disposer_method

class CamelContextFactory {

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

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

同样,可使用 制作者字段 ,例如:

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

class CustomCamelContext extends DefaultCamelContext {

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

这个模式可用于避免在容器初始化时自动启动 Camel 上下文路由,方法是调用 setAutoStartup 方法,例如:

@ApplicationScoped
class ManualStartupCamelContext extends DefaultCamelContext {

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