开发者社区> 问答> 正文

使用apache camel从表中选择数据

我希望能够使用Camel连续轮询数据库以从表中选择数据。我已经在我的Spring Boot应用程序中配置了Camel。这是我正在使用的配置

build.gradle:

implementation 'org.apache.camel:camel-jdbc-starter:2.24.0'
implementation 'org.apache.camel:camel-sql-starter:2.24.0'

RouteBuilder类:

@Component
public class CustomCamelConfig extends RouteBuilder {

    Logger log = LoggerFactory.getLogger(getClass());

    @Autowired
    RouteDataMapper dataMapper;

    @Override
    public void configure() throws Exception {

         from("timer://timer1?period=2s").log("Called every 2 seconds")
         .setBody(constant("select * from tenders"))
         .bean(dataMapper,"generateSalesData")
         .noDelayer();
    }

}
@Component
public class RouteDataMapper {

    Logger log = LoggerFactory.getLogger(getClass());

    public void generateSalesData(String payload) {

        log.info("RouteDataMapper - [generateSalesData]");
        log.info("payload : {}", payload);
    }

}

application.properties

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@xxx:xxx/zzz
spring.datasource.username=zzz
spring.datasource.password=zzz

我面临的问题是,当我打印bean方法参数(generateSalesData(字符串有效载荷))时,我得到查询字符串本身(“ select * from bids”),而不是表中的值。configure方法中的setBody()不接受sql:select .. statement,显示为“ ProcessorDefinition类型的setBody(Expression)方法不适用于参数(String)”。

我是骆驼的新手。有人可以让我知道我想念的是什么。

问题来源:Stack Overflow

展开
收起
montos 2020-03-27 12:38:25 981 0
1 条回答
写回答
取消 提交回答
  • 如您所写,您所拥有的路线只是将消息的主体设置为恰好看起来像SQL的字符串。骆驼不知道,因为您没有使用正确的组件。

    代替

    .setBody(constant("select * from tenders"))
    

    您需要告诉骆驼使用sql组件

    .to("sql:select * from tenders")
    

    文档中所述,传递给的结果RouteDataMapper将是a 。您需要相应地调整方法参数。List<Map<String, Object>>

    回答来源:Stack Overflow

    2020-03-27 12:39:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Flink技术进阶 立即下载
Apache Spark: Cloud and On-Prem 立即下载
Hybrid Cloud and Apache Spark 立即下载

相关镜像