У меня есть два таймера, что график две задачи:Java два таймера
public ReWrite() throws InterruptedException {
timer = new Timer();
TimerTask CSVTask = new TimerTask() {
@Override
public void run() {
readFromCSV();
}
};
TimerTask mailTask = new TimerTask() {
@Override
public void run() {
checkStatus();
}
};
timer.schedule (CSVTask, 0l, 1000*60*60);
timer.schedule (mailTask, 60000l, 1000*60*10);
}
readFromvCSV()
- Нахождение всех файлов CSV в папке, кроме последнего
- Чтение всех данных от них и напишите в CassandraDB (или, если не можете - до последнего файла в папке)
- Удалить все файлы CSV (кроме последнего)
checkStatus()
- Поиск всех файлов CSV в папке и возьмите размер файла один последний
- Если файл размером> 1 Мб, отправка по электронной почте
Он работает вначале, хотя данных было несколько строк, но когда речь идет о тысячах - я получил это сообщение об ошибке:
Exception in thread "Timer-0" java.lang.ArrayIndexOutOfBoundsException: 1
at handler.emergency.ReWrite.WriteToCassandra(ReWrite.java:197)
at handler.emergency.ReWrite.lambda$ReadFromCSV$1(ReWrite.java:137)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at handler.emergency.ReWrite.ReadFromCSV(ReWrite.java:129)
at handler.emergency.ReWrite.access$000(ReWrite.java:21)
at handler.emergency.ReWrite$1.run(ReWrite.java:56)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Возможно, я получил эту ошибку, обратившись к файлу с двумя задачами одновременно?
Возможно, я могу просто написать два разных класса с их собственными таймерами и задачами: один с функциями чтения/записи и второй для чтения \ электронной почты, но мне интересно решить проблему таким образом с помощью двух таймеров/задач.
Что мне нужно для этого? Еще одна асинхронная тема?
Извините за все ошибки, мой первый пост
ОБНОВЛЕНО: сообщение для невнимательности, извините. Ошибка связана с неправильными данными CSV.
Он сообщает вам, что ошибка находится на 'at com.academmedia.stat.handler.emergency.ReWrite.WriteToCassandra (ReWrite.java:197)' –
Да, извините, просто не видел эту строку трассировки. Кажется, иногда мозг и глаза нуждаются в отдыхе * _ * – ANTVirGEO