Приложение Spring Boot с маршрутами Apache Camel .xml не будет подключаться к базе данных Citrus mock JDBC? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь написать интеграционный тест Junit для службы Spring Boot, использующей маршруты apache camel xml для обработки данных. (Настоящий) сервис читает из раздела kafka и выполняет некоторые манипуляции с данными, прежде чем подключиться к базе данных и сохранить данные в различных таблицах. Я успешно смоделировал кластер Kafka с помощью Citrus, однако я не могу подключиться к базе данных Citrus и не вижу ошибок в журналах, чтобы выяснить, почему это так.

Обычно реальное приложениераскручивается и делает этот процесс совершенно нормально по отношению к реальной базе данных SQL Server. Соединения определяются через свойства, а драйвер устанавливается как драйвер SQL Server.

Я ознакомился с примерами Citrus для JDBC, настроил конечную точку SingleConnectionDatasource и JDBC и включил в свой файл зависимости Citrus-JDBC и Citrus-JDBC-Driver. Мои application.properties содержат свойства, которые (должны) указывать на экземпляр Citrus JDBC.

Основываясь на некоторой информации журнала, я вижу, что приложение пытается подключиться к БД даже во время тестирования, так как я запустил тест, переключившись на базу данных h2 в памяти и получил ошибки, когда системапытался написать в него. Поэтому я считаю, что моя проблема связана с настройкой Citrus DB и / или моим подключением к ней.

Application Properties:
spring.datasource.url=jdbc:citrus:http://localhost:4567/mockdb
spring.datasource.driver-class-name=com.consol.citrus.db.driver.JdbcDriver
spring.datasource.name=mockdb 
JdbcServer bean:
    @Bean
    public JdbcServer jdbcServer() {
        return CitrusEndpoints.jdbc()
                .server()
                .host("localhost")
                .databaseName("mockdb")
                .port(4567)
                .autoStart(true)
                .debugLogging(true)
                .build();
    } 
SingleDataSource bean:
    @Bean
    public SingleConnectionDataSource dataSource() {
        SingleConnectionDataSource dataSource = new SingleConnectionDataSource();
        dataSource.setDriverClassName(JdbcDriver.class.getName());
        dataSource.setUrl("jdbc:citrus:http://localhost:4567/mockdb");
        return dataSource;
    } 
Apache camel xml route (where the attempt to write to DB is made): 
<choice id=“businessObjectThatTriggersThisFlow”>
                    <when id=“businessObjectThatTriggersThisFlow”>
                        <xpath>PATH_OF_FILE</xpath>
                        <split id=“businessObjectFromFile” stopOnException="true">
                            <xpath>FILE_THAT_GETS_READ_IN</xpath>
                            <to id="_to5" uri="bean:internalBusinessObjectDataProcessor”/>
                            <log id=“businessObjectTotalSize” message="Total number of BusinessObjects >>> ${header.CamelSplitSize}"/>
                            <setBody id="insert_request_business_object_query">
                                <constant> {{insert.BUSINESS_OBJECT}}</constant>
                            </setBody>
<!--                            <to id="insert_BUSINESS_OBJECT” uri="jdbc:dataSource?useHeadersAsParameters=true"/>-->
                            <to id=“insert_BUSINESS_OBJECT” uri="jdbc:dataSource"/> 

Я также автоматически подключаю JdbcServer и источник соединений в тесте следующим образом:

    @Autowired
    JdbcServer jdbcServer;

    @Autowired
    SingleConnectionDataSource dataSource;

Когда приложение вращается, я вижу вЖурналы, что JDBC-сервер запущен:

17:27:24.288 [main] INFO  c.c.citrus.jdbc.server.JdbcServer - Started server: jdbcServer
17:27:24.573 [main] INFO  o.s.j.d.SingleConnectionDataSource - Loaded JDBC driver: com.consol.citrus.db.driver.JdbcDriver 

И тест правильно отправляет сообщение через Kafka и разбивает информацию на соответствующие части. Следующим ожидаемым результатом будет сообщение о регистрации, похожее на следующее, которое происходит во время реального рабочего процесса после вставки объекта:

12:58:19.745 [Camel (camel) thread #0 - KafkaConsumer[kafka.topic.name]] INFO  insertLog - Exchange[ExchangePattern: InOnly, Headers: {breadcrumbId=63821-1573061658341-0-4, CamelJdbcUpdateCount=1, kafka.OFFSET=47, kafka.PARTITION=2, kafka.TOPIC=kafka.topic.thattriggersthis, BUSINESS_OBJECT_DATE=, BUSINESS_OBJECT_STATUS=status, BUSINESS_OBJECT_UUID=A059906E-DD6A-4265-A759-01865D385111}, BodyType: null, Body: [Body is null]]

Почему моя служба не подключается к фиктивной БД?

...