Springboot и верблюд, источник данных уже закрыт при корректном завершении работы - PullRequest
1 голос
/ 12 марта 2020

Я создал небольшое приложение, которое извлекает файлы журнала, извлекает соответствующие данные и помещает их в базу данных sh, используя все компоненты верблюда.

Это работает довольно хорошо, если только я не остановлю его (отключение по грациозности) .
Когда я это делаю, Spring закрывает источник данных, который я объявил в application.yml, но, поскольку все еще есть файлы, обрабатываемые (внутренние обмены) по маршруту, я получаю много ошибок "источник данных уже закрыт".

немного упрощено:

public class LogToDb extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("sftp:user@host.com/logs?password=T0pS3cret?include=.*\.gz")
            .unmarshal().gzipDeflater()
            .split(body().tokenize("\n")).streaming()
            .filter(bodyAs(String.class).contains("interesting line"))
            .bean(new LineToAttributesMap())
            .to("sql:INSERT INTO myTable(date, id, duration) values (:#date, :#id, :#duration)");
    }
}
camel:
  springboot:
    main-run-controller: true
spring:
  datasource:
    url: jdbc:postgresql://localhost:5433/myDb
    hikari:
      driver-class-name: org.postgresql.Driver
      password: ********
      username: postgres
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/>
    </parent>
    <!-- <groupid />, <artifactId />, <version /> ... -->
    <properties>
        <java.version>11</java.version>
        <camel.version>3.0.1</camel.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-ftp</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-sql-starter</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <!-- ... non-relevant dependencies omited for brevity... -->
    </dependencies>
</project>

Есть ли способ сообщить пружине, что он должен дождаться полного завершения верблюда, прежде чем сможет закрыть источник данных?

(как предложено @ClausIbsen, Джира создала: https://issues.apache.org/jira/browse/CAMEL-14737)

...