簡體   English   中英

使用apache camel從表中選擇數據

[英]Select data from table using apache camel

我希望能夠使用 Camel 連續輪詢數據庫以從我的表中選擇數據。 我在 Spring Boot 應用程序中配置了 Camel。 這是我正在使用的配置

構建.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);
    }

}

應用程序屬性

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))時,我得到的是查詢字符串本身(“select * fromTENTS”),而不是表中的值。 configure 方法中的 setBody() 不接受sql:select .. statement ,顯示“ProcessorDefinition 類型中的方法 setBody(Expression) 不適用於參數 (String)”。

我是駱駝的新手。 任何人都可以讓我知道我缺少什么。

正如所寫的那樣,您所擁有的路線只是將消息正文設置為一個字符串,該字符串恰好看起來像一條 SQL。 Camel 不知道,因為您沒有使用正確的組件。

代替

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

你需要告訴 Camel 使用sql組件

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

傳遞給RouteDataMapper的結果將是List<Map<String, Object>> ,如文檔中所述。 您需要相應地調整您的方法參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM