java - Autowiring 构造函数时 Camel 没有路线

标签 java spring apache-camel

我在模块中使用 spring boot。我有一个包含多个子模块的父项目。

当我使用 Contructor Autowiring 配置路由时,Camel 路由无法启动。

我得到 Total 0 routes, 其中 0 已启动当像这样启动构造函数时。

private final ScanProcessor scanProcessor;
private final ScheduleProcessor scheduleProcessor;
private final TagProcessor tagProcessor;
private final LatestScanProcessor latestScanProcessor;
private final RabbitMqService rabbitMqService;

@Autowired
public DashboardRoute(ScanProcessor scanProcessor,
                      ScheduleProcessor scheduleProcessor,
                      TagProcessor tagProcessor,
                      LatestScanProcessor latestScanProcessor,
                      RabbitMqService rabbitMqService){
    this.scanProcessor = scanProcessor;
    this.scheduleProcessor = scheduleProcessor;
    this.tagProcessor = tagProcessor;
    this.latestScanProcessor = latestScanProcessor;
    this.rabbitMqService = rabbitMqService;
}

@Override
public void configure() throws Exception {
           from(CONSUME_SCHEDULE_ROUTE)
            .routeId("consume-schedule")
            .process(scheduleProcessor);  // no strings
}

当我不 Autowiring 任何 bean 并像这样删除路由时,整个事情就有效了。

 from(CONSUME_SCHEDULE_ROUTE)
   .routeId("consume-schedule")
   .process("scheduleProcessor")  // notice this is a string

camel 是否支持 spring route Constructor Autowiring ?我是否需要采取一些额外的配置步骤来正确处理这个问题?当我重构类名时,我更喜欢以这种方式直接链接 bean,它可以正常链接回来。

最佳答案

我尝试了与您类似的示例并且它工作正常。您可以确保在路由类以及所有处理器类和服务类中都有@Compoent。

您也可以尝试在局部变量上添加@Autowired。 (构造函数应该可以正常工作。这只是确保您的构造函数正常工作的额外步骤)

@Component
@ServletComponentScan(basePackages = "com.example.camel")
public class ServiceRoutes extends RouteBuilder { 

    @Autowired
    private ScanProcessor scanProcessor;
    @Autowired
    private  ScheduleProcessor scheduleProcessor;
    @Autowired
    private TagProcessor tagProcessor;
    @Autowired
    private LatestScanProcessor latestScanProcessor;
    @Autowired
    private RabbitMqService rabbitMqService;

    @Override
    public void configure() throws Exception {
               from(CONSUME_SCHEDULE_ROUTE)
                .routeId("consume-schedule")
                .process(scheduleProcessor); 
    }
}

希望这对您有所帮助。

关于java - Autowiring 构造函数时 Camel 没有路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753768/

相关文章:

java - org.apache.activemq.transport.InactivityIOException : Cannot send, channel 已经失败

java - 我的代码是否处于死锁状态?

java - 设置用户凭据时 Youtube Java API 出错

java - 带有 ISO 参数的 DateTimeFormat 无法正确解析时区

spring - 如何在 Spring Batch 中创建动态步骤

java - Spring JUNIT 数据源 Autowiring

java - Camel DELETE 方法不支持 Content-Type?

java - Camel 最佳实践 - 我应该在哪里调用外部 Web 服务?在 Bean、处理器内还是直接来自路由?

java - 如何从父目录中查找子目录?

java - 更改 NoSuchBeanDefinitionException 上的 Spring 行为