Клиент-серверное приложение, которое позволяет работать с коллекцией, хранящей музыкальные группы. Всего доступно около 20 команд. Вся работа происходит в консоли.
- Клонировать проект к себе.
- Запустить его через IDE.
- Открыть файл
sever/src/main/resources/database.properties
и вписать недостающие значения. (используетсяPostgreSQL
) - В файле
sever/src/main/resources/server.properties
передается переменная окруженияSALT
. Чтобы пароли надежно хранились в базе данных, то необходимо создать переменную оружения с именемSALT
, значение которой будет соль для хэша (подойдет случайный набор букв, цифр и символов). - Теперь можете запустить файлы
ServerApplication
иClientApplication
и начать эксперементировать)
- Заходим в директорию
Client_Server_App
- Выполняем комадну
install -f pom.xml
- Находим в папках
target
файлы с названиемserver*-jar-with-dependencies.jar
иclient*-jar-with-dependencies.jar
- Перекидываем их туда, откуда хотим делать запуск (например, на удаленную машину)
- Запуск
jar
осуществляется следующей командой:java -jar server*-jar-with-dependencies.jar
Проект больше учебный, цель стояла познакомится с новыми технологиями и инструментами, поэтому порой использовались не самые подходящие инструменты для этой задачи.
- Взаимодействие между клиентом и сервером происходит по TCP протоколу.
- Данные передавал при помощи ServerSocketChannel и SocketChannel.
- Сериализация данных
- Jdbc, HikaryCP
- Миграции накатываются с помощью Liquebase
- JUnit 5 и Mockito
- Многопоточность
Чтобы просмотреть весь функционал необходимо авторизироваться/зарегистрироваться и вызвать команду help Важная пометка: просматривать и собирать статистику можно про все элементы коллекции, а изменять и удалять - только те, которые были добавлены именно с этого аккаунта.
Сервер не зависит от числа одновременно подключенных клиентов.
- Закрепил и изучил некоторые тонкости с работой Liquebase
- Применил в проекте HikariCP
- Во время разработки проекта использовал паттерны (например, в основе всего проекта лежит паттерн Command)
- Создал авторизацию и регистрацию пользователей.
- После входа в аккаунт создается сессия, которая всегда передается с запросом клиента.
- Настроил время жизни сессии и sheduler который удалят устаревшие сессии из бд (живут 25 минут, но можно настроить в properties)
- Настроил хэширование паролей
- Выполнил код по SOLID
- Постарался применять IoC в классах взаимодействия с бд.
- Познакомился с concurrency и многопоточностью (в проекте применял ReentrantLock, Fixed thread pool, создание собственных Thread)