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