我有一个项目,其中我使用spring-boot-jdbc-starter
并自动为我配置数据源。
现在我将camel-spring-boot
添加到项目中,并且我能够成功地从类型为RouteBuilder
的Bean创建路由。
但是当我使用camel的sql组件时,它无法找到数据源。有没有简单的方法将Spring配置的数据源添加到CamelContext
?在camel项目的示例中,他们使用spring xml进行数据源配置,但我正在寻找一种使用java配置的方法。这就是我试过的:
@Configuration
public class SqlRouteBuilder extends RouteBuilder {
@Bean
public SqlComponent sqlComponent(DataSource dataSource) {
SqlComponent sqlComponent = new SqlComponent();
sqlComponent.setDataSource(dataSource);
return sqlComponent;
}
@Override
public void configure() throws Exception {
from("sql:SELECT * FROM tasks WHERE STATUS NOT LIKE 'completed'")
.to("mock:sql");
}
}
答案 0 :(得分:0)
以下是示例/示例代码(Java DSL)。为此我用了
在启动spring-boot时,创建表并加载数据。然后是骆驼路线,跑步"选择"拉数据。
以下是代码:
public void configure() throws Exception {
from("timer://timer1?period=1000")
.setBody(constant("select * from Employee"))
.to("jdbc:dataSource")
.split().simple("${body}")
.log("process row ${body}")
答案 1 :(得分:0)
我必须发布它,因为尽管答案在注释中,但您可能没有注意到,在我看来,这样的配置对于运行该过程是必需的。 SQL组件的使用应如下所示:
Employee employee = new Employee();
employee.setEmployeeName(result.getOrDefault("employeeName", "").toString());
employee.setEmployeeName(!StringUtils.isEmpty(result.get("employeeName").toString()) ? result.get("employeeName").toString() : " ");
// when i am using this solution it is not giving null pointer exception
// but if the value is null then it is returning "null" value it means
// null as a string which shouldn't be the expected output.
employee.setEmployeeName(String.valueOf(result.get("employeeName").equals("null") ? "" : result.get("employeeName")));
List<Map<String,Object>> r1 = new ArrayList<Map<String,Object>>();
response.forEach(result -> {
employee.setEmployeeName(result.getOrDefault("employeeName", "").toString());
})
请注意 from("timer://dbQueryTimer?period=10s")
.routeId("DATABASE_QUERY_TIMER_ROUTE")
.to("sql:SELECT * FROM event_queue?dataSource=#dataSource")
.process(xchg -> {
List<Map<String, Object>> row = xchg.getIn().getBody(List.class);
row.stream()
.map((x) -> {
EventQueue eventQueue = new EventQueue();
eventQueue.setId((Long)x.get("id"));
eventQueue.setData((String)x.get("data"));
return eventQueue;
}).collect(Collectors.toList());
})
.log(LoggingLevel.INFO,"******Database query executed - body:${body}******");
的使用。 ?dataSource=#dataSource
名称指向Spring配置的DataSource对象,可以将其更改为另一个对象,从而在不同的路由中使用不同的DataSource。