Select 来自 table 使用 apache camel 的数据
Select data from table using apache camel
我希望能够使用 Camel 从我的 table 连续轮询数据库到 select 数据。我已经在我的 spring 启动应用程序中配置了 Camel。这是我使用的配置
build.gradle:
implementation 'org.apache.camel:camel-jdbc-starter:2.24.0'
implementation 'org.apache.camel:camel-sql-starter:2.24.0'
路由生成器class:
@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)) 时,我得到查询字符串本身 ("select * from tenders") 而不是 table.配置方法中的 setBody() 不接受 sql:select .. statement
,显示 "The method setBody(Expression) in the type ProcessorDefinition is not applicable for the arguments (String)".
我是骆驼的新手。谁能告诉我我想念的是什么。
如所写,您拥有的路由只是将消息正文设置为恰好看起来像 SQL 的字符串。骆驼不知道,因为您没有使用正确的组件。
而不是
.setBody(constant("select * from tenders"))
您需要告诉 Camel 使用 sql
组件
.to("sql:select * from tenders")
传递给 RouteDataMapper
的结果将是 List<Map<String, Object>>
,如 documentation 中所述。您需要相应地调整您的方法参数。
我希望能够使用 Camel 从我的 table 连续轮询数据库到 select 数据。我已经在我的 spring 启动应用程序中配置了 Camel。这是我使用的配置
build.gradle:
implementation 'org.apache.camel:camel-jdbc-starter:2.24.0'
implementation 'org.apache.camel:camel-sql-starter:2.24.0'
路由生成器class:
@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)) 时,我得到查询字符串本身 ("select * from tenders") 而不是 table.配置方法中的 setBody() 不接受 sql:select .. statement
,显示 "The method setBody(Expression) in the type ProcessorDefinition is not applicable for the arguments (String)".
我是骆驼的新手。谁能告诉我我想念的是什么。
如所写,您拥有的路由只是将消息正文设置为恰好看起来像 SQL 的字符串。骆驼不知道,因为您没有使用正确的组件。
而不是
.setBody(constant("select * from tenders"))
您需要告诉 Camel 使用 sql
组件
.to("sql:select * from tenders")
传递给 RouteDataMapper
的结果将是 List<Map<String, Object>>
,如 documentation 中所述。您需要相应地调整您的方法参数。