Написать консольное java приложение со следующими функциями:
- При запуске без параметров приложение начинает раз в секунду писать текущее время(
timestamp
) в базу. - При запуске с параметром
-p
приложение выводит содержимое базы на экран и завершает работу.
Требуется обеспечить возможность корректной работы приложения привременной недоступности сервера базы данных - приложение должно выводить в лог или на экран информацию о том, что соединения нет, и предпринимать попытку установить соединение заново, а после восстановления соединения записать все данные, которые не попали в ДБ во время отсутствия связи. Таким образом, требуется временный буфер для хранения не сохраненных данных. Интервал восстановления соединения - 5 секунд.
Все данные должны записываться в ДБ строго в хронологическом порядке, т.е. при выводе данных на экран timestamp должен быть в Ascending Order без применения сортировки.
Нужно также учесть и соответственно «ответить» на вопрос (посредством кода): что будет происходить, если соединение с БД медленное или БД настолько загружена, что запись в нее будет забирать достаточно много времени.
Это двухпоточное консольное java приложение, в котором возможно применить следующий подход:
-
Основной поток - раз в секунду генерирует timestamp и сохраняет его в буфер. Поток не должен прерывать свое выполнение при отсутствии соединения с базой данных.
-
Дополнительный поток предназначен для работы с базой данных (сохранение данных и слежение за соединением к БД).
База данных на выбор: MySQL, MongoDB. Способ хранения данных в базе: на усмотрение автора.
Для запуска MySQL можно использовать Docker:
docker run --rm -it --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=testdb \
-v $PWD/database:/var/lib/mysql \
-p 3306:3306
mysql:latest
Для создания таблицы необходимо запустить initTable.sql.