Я создал небольшое приложение, которое извлекает файлы журнала, извлекает соответствующие данные и помещает их в базу данных 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)