Выберите данные из таблицы, используя apache верблюд - PullRequest
1 голос
/ 13 марта 2020

Я хочу иметь возможность постоянно опрашивать базу данных, чтобы выбрать данные из моей таблицы, используя Camel. Я настроил 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();
    }

}

Bean:

@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)), я получаю саму строку запроса («select * from tenders»), а не значение из таблицы. SetBody () в методе configure не принимает sql:select .. statement, показывает «Метод setBody (Expression) в типе ProcessorDefinition не применим для аргументов (String)».

Я новичок в Camel , Может кто-нибудь, пожалуйста, дайте мне знать, что мне не хватает.

1 Ответ

1 голос
/ 13 марта 2020

Ваш маршрут, как написано, просто устанавливает тело сообщения в строку, которая выглядит как SQL. Верблюд понятия не имеет, так как вы не использовали правильный компонент.

Вместо

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

вы должны указать Camel использовать sql компонент

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

Результат, переданный RouteDataMapper, будет List<Map<String, Object>>, как описано в документации . Вам необходимо соответствующим образом настроить параметры вашего метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...