Producer/Consumer на Spring

152
24 апреля 2018, 04:18

Всем, доброго времени суток.

Такой вот вопрос. Нужно реализовать парсер файлов, который будет выводить информацию в виде JSON. Программе через командную строку вводим путь до файла json/csv/xlsx формата и она нам в командную строку выводит сформированные json строки.

Без Spring, программа работает на "ура". Но вот введение Spring, которым я никогда не работал, в мою многопоточную программу вызывает кучу вопросов и сразу ломаются и потоки и логика программы. По сему, прошу помощи.

В кратце опишу классы. Есть класс Producer, который читает файл и закидывает строку в виде LinkedList в BlockingQueue

public class Producer implements Runnable {
int i = 0;
private Handler handler;

Producer() {
}
public Producer(Handler handler) {
    this.handler = handler;
}
// какая-то логика чтения файла
}

Класс Consumer, вычитывает очередь из BlockingQueue.

public class Consumer implements Runnable {
 private Handler handler;
Consumer() {
}
public Consumer(Handler handler) {
    this.handler = handler;
}
//некая логика класса Consumer
 }

Класс Handler является связующим классом, между Producer/Consumer. Он определяет расширение файла, местоположение файла, в нем хранятся флаги и т.д.

public class Handler {


    private Writer writer;

    @Resource(name = "jsonReader")
    private Reader jsonReader;
    @Resource(name = "csvReader")
    private Reader csvReader;
    @Resource(name = "xlsxReader")
    private Reader xlsxReader;

    private boolean isFileEnd = false;
    private String filename = "";
    private Path filePath;
    private String fileExtension = "none";
    private File file;
    private BlockingQueue<LinkedList> queue;
    public Handler() {
    }

    Handler(Writer writer,Reader reader,  int count) {
        this.reader = reader;
        this.writer = writer;
        queue = new LinkedBlockingQueue(count);
    }
//некая логика класса 
}

Есть еще отдельные классы для каждого расширения.

Основной вопрос состоит в том, как сделать Handler бином и в зависимости от расширения файла создавать Reader внутри Handler либо jsonReader, либо другой какой-либо.

Если читать файл в формате json и насильно указать в Handler, чтобы он использовал Reader в качестве jsonReader, то все работает.

Почитал про возможность использования MAP для конструктора класса, но как его применить, так и не понял. Сейчас все инструкции записаны в xml, но рад буду и формату в аннотациях, мне не принципиально.

READ ALSO
Kotlin локальный проект

Kotlin локальный проект

Доброго времени сутокЯ хочу создать проект на Kotlin, но не имею доступа к центральным репозиториям напрямую, могу только скачивать нужные библиотеки...

122
Можно ли одновременно держать java 8 и java 9?

Можно ли одновременно держать java 8 и java 9?

Есть Java 8 , Java 9 и к ним JDK 8 и JDK 9Нужно ли удалить одну из версий, чтобы не возникало никаких сбоев?

146
Проблемы с добавлением Toolbar в android-приложение

Проблемы с добавлением Toolbar в android-приложение

Я попытался добавить Toolbar в свое android-приложение и при объявлении и инициализации возникли кое-какие проблемыА именно:

145
Как организовать методы в классе, чтобы их не было видно в подсказках?

Как организовать методы в классе, чтобы их не было видно в подсказках?

Скажите пожалуйста, как надо переписать, чтобы методы switchPlayersSkipIsEnabled() и switchPlayersActions() не показывались в контекстной подсказке при написании...

118