当前位置: 首页 > 知识库问答 >
问题:

使用apache camel从表中选择数据

孟乐逸
2023-03-14

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

建筑格拉德尔:

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(String payload))时,我得到的是查询字符串本身(“从投标书中选择*”),而不是表中的值。configure方法中的setBody()不接受sql:select。。语句显示“类型处理器定义中的方法setBody(表达式)不适用于参数(字符串)”。

我刚接触骆驼。谁能告诉我我错过了什么。

共有1个答案

韩飞翮
2023-03-14

正如所写的那样,您的路由只是将消息体设置为一个看起来像SQL的字符串。Camel不知道,因为您没有使用正确的组件。

而不是

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

你需要告诉Camel使用sql组件

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

传递给RouteDataMapper的结果将是一个列表

 类似资料:
  • 问题内容: 如何编写SQL语句从三个表中选择数据? 问题答案: 使用联接 这将要求每个表都有一个table_1_id键,并且每个表中都有一个条目。 如果table_2或table_3可能没有数据,但您仍想显示来自table_1的数据,则可以使用LEFT JOIN

  • 问题内容: 可以说我有以下熊猫数据框: 我可以根据特定的值进行子集化: 但是如何根据值列表进行子集设置呢?-这样的东西: 问题答案: 您可以使用方法: 并得到相反的用法:

  • 问题内容: 我用来检索数据。我可以使用语句获取数据 现在,我可以使用以下名称获取相册名称: 现在我要获取专辑名称和角色用户的行名为 我正在使用查询 现在,当persons.get(0)返回一个对象时,如何获取名字和专辑行 通过运行代码: 我得到这个: 如何映射并获取和? 问题答案: 现在如何在persons.get(0)返回对象时获取行名和相册名 SELECT子句中具有多个 select_expr

  • 我使用以下列表从控制器填充了JSP中的下拉列表:“” 例如,我使用下拉菜单将5保存为db中thirdPartyOccupationId的值。当我重新加载页面时,值5不是选中的值。 同一段代码正在处理不同的字段,我不知道我错过了什么。 模型类: ReportClass.java 控制器.java 感谢任何指点。

  • 问题内容: 我正在尝试从以下查询中获取行数。我只得到行计数为1,但有35条记录。您能否让我知道如何从内部查询中获取计数? 谢谢 问题答案: 您缺少FROM,需要为子查询指定别名。

  • 问题内容: 这项工作(使用Pandas 12 dev) 然后我意识到我需要使用“开始于”来选择字段,因为我缺少一堆。因此,根据我所能追踪的熊猫文档,我尝试过 并得到了AttributeError:’float’对象没有属性’startswith’ 所以我尝试了具有相同结果的替代语法 参考http://pandas.pydata.org/pandas-docs/stable/indexing.htm