Camel:使用 spring-boot 配置的数据源

Posted

技术标签:

【中文标题】Camel:使用 spring-boot 配置的数据源【英文标题】:Camel: use datasource configured by spring-boot 【发布时间】:2015-10-13 12:18:11 【问题描述】:

我有一个项目,我在其中使用spring-boot-jdbc-starter,它会自动为我配置一个数据源。 现在我将camel-spring-boot 添加到项目中,我能够成功地从RouteBuilder 类型的Beans 创建路由。 但是当我使用骆驼的 sql 组件时,它找不到数据源。有什么简单的方法可以将 Spring 配置的数据源添加到CamelContext?在骆驼项目的示例中,他们使用 spring xml 进行数据源配置,但我正在寻找一种使用 java config 的方法。这是我尝试过的:

@Configuration
public class SqlRouteBuilder extends RouteBuilder 
  @Bean
  public SqlComponent sqlComponent(DataSource dataSource) 
    SqlComponent sqlComponent = new SqlComponent();
    sqlComponent.setDataSource(dataSource);
    return sqlComponent;
  

  @Override
  public void configure() throws Exception 
    from("sql:SELECT * FROM tasks WHERE STATUS NOT LIKE 'completed'")
            .to("mock:sql");
  

【问题讨论】:

我的不好,不需要 sqlComponent Bean。由于 CamelContext 可以访问所有 spring bean 只需在 sql 端点的末尾添加 ?dataSource=dataSource 即可按预期工作 您应该将该评论作为答案发布并接受它:) 【参考方案1】:

我必须发布它,因为虽然答案在评论中,但您可能没有注意到它,在我的情况下,这样的配置是运行该过程所必需的。 SQL 组件的使用应该是这样的:

         from("timer://dbQueryTimer?period=10s")
                .routeId("DATABASE_QUERY_TIMER_ROUTE")
                .to("sql:SELECT * FROM event_queue?dataSource=#dataSource")
                .process(xchg -> 
                    List<Map<String, Object>> row = xchg.getIn().getBody(List.class);
                    row.stream()
                            .map((x) -> 
                                EventQueue eventQueue = new EventQueue();
                                eventQueue.setId((Long)x.get("id"));
                                eventQueue.setData((String)x.get("data"));
                                return eventQueue;
                            ).collect(Collectors.toList());
                )
                .log(LoggingLevel.INFO,"******Database query executed - body:$body******");

注意?dataSource=#dataSource 的使用。 dataSource 名称指向 Spring 配置的 DataSource 对象,可以更改为另一个,从而在不同的路由中使用不同的 DataSource。

【讨论】:

【参考方案2】:

这里是示例/示例代码 (Java DSL)。为此我使用了

弹簧靴 H2 嵌入式数据库 骆驼

在启动 spring-boot 时,创建表并加载数据。然后骆驼路线,运行“选择”来拉数据。

这里是代码

public void configure() throws Exception 

    from("timer://timer1?period=1000")
    .setBody(constant("select * from Employee"))
    .to("jdbc:dataSource")
    .split().simple("$body")
    .log("process row $body")

full example in github

【讨论】:

以上是关于Camel:使用 spring-boot 配置的数据源的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中为 Camel 配置 Jackson ObjectMapper

Camel ActiveMQ + Spring boot 不读取 spring activemq 配置

Camel ActiveMQ 性能调优

如何读取HL7文件并使用Apache Camel,Hapi和Spring(Java配置)解析它

为 Apache Camel 配置数据源

使用SpringOAuthResttemplate的Camel Rest api使用者