【问题标题】:Select data from table using apache camel使用 apache camel 从表中选择数据
【发布时间】:2020-06-25 11:17:41
【问题描述】:

我希望能够持续轮询数据库以使用 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(String payload)) 时,我得到的是查询字符串本身(“从投标中选择 *”)而不是表中的值。 configure 方法中的 setBody() 不接受 sql:select .. statement,显示“ProcessorDefinition 类型中的方法 setBody(Expression) 不适用于参数 (String)”。

我是骆驼的新手。谁能让我知道我想做什么。

【问题讨论】:

标签: java spring spring-boot apache-camel


【解决方案1】:

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

代替

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

你需要告诉 Camel 使用 sql 组件

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

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

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多