我希望能够连续轮询数据库,使用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(表达式)不适用于参数(字符串)”。
我刚接触骆驼。谁能告诉我我错过了什么。
正如所写的那样,您的路由只是将消息体设置为一个看起来像SQL的字符串。Camel不知道,因为您没有使用正确的组件。
而不是
.setBody(constant("select * from tenders"))
你需要告诉Camel使用sql
组件
.to("sql:select * from tenders")
传递给RouteDataMapper的结果将是一个列表