Я использую Spring Boot для запуска верблюжьего маршрута, который использует Camel-sql для запроса базы данных MySQL и вызова службы REST.Camel SQL - Поместите DataSource в SimpleRegistry весной загрузки
application.properties
db.driver=com.mysql.jdbc.Driver
db.url=mysql://IP:PORT/abc
db.username=abc
db.password=pwd
Application.java
public static void main(String[] args) {
SpringApplication.run(WlEventNotificationBatchApplication.class, args);
}
DataSourceConfig.java
public class DataSourceConfig {
@Value("${db.driver}")
public String dbDriver;
@Value("${db.url}")
public String dbUrl;
@Value("${db.username}")
public String dbUserName;
@Value("${db.password}")
public String dbPassword;
@Bean("dataSource")
public DataSource getConfig() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(dbDriver);
dataSource.setUrl(dbUrl);
dataSource.setUsername(dbUserName);
dataSource.setPassword(dbPassword);
return dataSource;
}
}
WLRouteBuilder.java
@Component
public class WLRouteBuilder extends RouteBuilder {
@Autowired
private NotificationConfig notificationConfig;
@Autowired
private DataSource dataSource;
@Override
public void configure() throws Exception {
from("direct:eventNotification")
.to("sql:"+notificationConfig.getSqlQuery()+"?dataSource="+dataSource)
.process(new RowMapper())
.log("${body}");
}
}
Я вижу ошибку ниже при запуске, узнал, что Camel не может найти компонент DataSource в реестре. Я совершенно не уверен, как вводить «DataSource» в реестр в Spring Boot с использованием Java DSL.
?dataSource=org.springframework.jdbc.datasource.DriverManagerDataSource%40765367 due to: No bean could be found in the registry for: [email protected]67 of type: javax.sql.DataSource
Привет Клаус, Большое спасибо за ваш ответ. Могу я задать вам еще один вопрос. from ("sql: {{list.sql}}? dataSource = # dataSource") .log ("строка процесса $ {body}") .end(); и в файле application.properties я включил camel.springboot.main-run-controller = true. Маршрут выполняется бесконечно, пока я не нажимаю CNTRL + C. Если я удалю camel.springboot.main-run-controller, Camel начнет маршрут и остановит основной поток. В любом случае, я могу запустить Camel, выполнить маршрут и остановиться. Надеюсь, мой вопрос ясен. Заранее спасибо! – user1637487
См. Это FAQ: http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html –
Привет, Клаус, Извините, если мне не хватает чего-то очень простого. Я использую Spring Boot для этого приложения. Я попытался из ("sql: {{list.eventnotification.sql}}? DataSource = # dataSource") .log ("строка процесса $ {body}") .to ("mock: bar"); и добавил getContext(). stop() ;. Тем не менее маршрут не остановлен из-за camel.springboot.main-run-controller = true в application.properties. В автономном приложении Java мы запускаем маршрут (camelcontext.start()) и останавливаем его вручную. Как это работает в Spring Boot? Помощь Pls – user1637487