![](/img/trans.png)
[英]How to extract data from xml and persist it to DB using 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.