Я довольно долго выясняю, откуда возникла моя проблема. Я могу работать локально, я собрал свой .jar
и тоже выполнил его локально.
У меня настроен поток интеграции следующим образом
@Bean
IntegrationFlow integrationFlow(final DataSource datasource) {
return IntegrationFlows.from(
Ftp.inboundStreamingAdapter(template())
.remoteDirectory("/folder/")
.patternFilter("file_name.txt")
.filter(
new FtpPersistentAcceptOnceFileListFilter(metadataStore(datasource), "")),
spec -> spec.poller(Pollers.fixedDelay(5, TimeUnit.SECONDS)))
.transform(streamToBytes())
.handle(handler())
.get()
}
@Bean
FtpRemoteFileTemplate template() {
return new FtpRemoteFileTemplate(ftpSessionFactory());
}
@Bean
public StreamTransformer streamToBytes() {
return new StreamTransformer(); // transforms to byte[]
}
@Bean
public ConcurrentMetadataStore metadataStore(final DataSource dataSource) {
return new JdbcMetadataStore(dataSource);
}
@Bean
public SessionFactory<FTPFile> ftpSessionFactory() {
DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();
sf.setHost(host);
sf.setPort(port);
sf.setUsername(userName);
sf.setPassword(password);
return sf;
}
У меня есть источник данных и мой набор информации ftp в моем application.yml
Когда я запускаю это локально, у меня нет проблем. Когда я запускаю gradle build
и запускаю .jar
с несколькими различными версиями openjdk (8u181, 8u191, 11.04), у меня нет проблем.
Когда я запускаю внутри контейнера docker, используя мой файл .jar
, возникает проблема.
Мой docker файл
FROM openjdk:8u212-jdk-alpine
WORKDIR /app
COPY build/libs/app-1.0.jar .
RUN apk add --update ttf-dejavu && rm -rf /var/cache/apk/*
ENTRYPOINT ["java", "-jar", "app-1.0.jar"]
Я включил DEBUG
и посмотрел вывод.
Работая локально и запуская встроенный .jar
, я вижу, что работает поллер и он запускает запросы SQL к таблице metadataStore, которая была создана в моей удаленной базе данных (postgresql).
Работая в контейнере docker, я не вижу запущенных запросов sql. что говорит мне, что где-то в этом заключается проблема.
При отладке при запуске мои журналы в консоли совпадают с INFO
s и WARN
s независимо от того, работают ли они локально, запускают встроенный .jar
или работают в контейнере docker. Есть это информационное сообщение, которое может помочь:
Bean with key 'metadataStore' has been registered as an MBean but has no exposed attributes or operations
Я проверил, может ли быть скрытая проблема с подключением SessionFactory
, пытаясь подключиться к неверному хосту, но я действительно получаю исключения в мой docker контейнер для неверного хоста. Поэтому я могу с уверенностью сказать, что FTP-соединение корректно и работает с правильным хостом и портом.
Я думаю, что это связано либо с опросником, либо с моим источником данных.
Внутри этого приложения я также запускаю Spring Data Rest с использованием JDB C и JPA. Могут ли быть проблемы с использованием bean-компонента источника данных в разных библиотеках?
Any помощь или руководство будет принята с благодарностью.