Czy ten Spring Batch jest dobrze napisany?

0

Hej,
Piszę własnego batcha w ramach nauki i chciałbym się zapytać czy ten przykład jest dobrze zrobiony?
https://vianneyfaivre.com/tech/spring-boot-spring-batch-java-8-custom-itemreader

Chodzi mi o to, że użytkownik (autor) w metodzie reader() tworzy listę plików. Wzbudziło to moją nieufność, ponieważ prosi się to o OutOfMemoryError. Po prostu wczytuje wszystkie pliki z danego katalogu do listy, a następnie zwraca FileReader który implementuje ItemReader. Czy to nie prosi się o kłopoty? Jeżeli ten przykład jest źle zrobiony (może jest dobrze) poproszę o jakieś rozjaśnienie, jak to powinno wyglądać poprawnie. Dzięki

1

File w Javie to taki „uchwyt” do pliku, którego zawartość nie jest wczytywania do pamięci ad hoc. Oczywiście gdyby tych plików w katalogu było zylion, wtedy lista może nie zmieścić się w pamięci, ale to jakis corner case. Gdzie widzisz problem?

0
Charles_Ray napisał(a):

File w Javie to taki „uchwyt” do pliku, którego zawartość nie jest wczytywania do pamięci ad hoc. Oczywiście gdyby tych plików w katalogu było zylion, wtedy lista może nie zmieścić się w pamięci, ale to jakis corner case. Gdzie widzisz problem?

No właśnie, a to gubi przetwarzanie batchowe w tym sensie, że powinno to być (proszę o poprawę, jeżeli się mylę )niezależne od ilości plików. Czy parę milionów plików nie wywaliłoby batcha?

1

Bez przesady. Obiekt File nie jest ciężki. Musiałbyś serio mieć tych plików kolosalne ilości. Taki obiekt to jakieś bajty. Nawet jakby miał 1kB (a ma wielokrotnie mniej) to milion plików to raptem 1GB pamięci.

1

Z dziennikarskiego obowiązku napiszę o jeszcze jednym ograniczeniu, o którym do tej pory nie było mowy - jest to systemowy limit file descriptorów per proces.

Natomiast w przypadku tego kodu jest luz, ponieważ FD jest tworzony dopiero przy tworzeniu java.io.FileDescriptor, a nie samego java.io.File.

1 użytkowników online, w tym zalogowanych: 0, gości: 1