Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/space27/javabackendspring
https://github.com/space27/javabackendspring
Last synced: 13 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/space27/javabackendspring
- Owner: Space27
- Created: 2024-02-05T19:59:25.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2024-12-03T19:04:15.000Z (about 1 month ago)
- Last Synced: 2024-12-03T19:30:56.139Z (about 1 month ago)
- Language: Java
- Size: 395 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
![Bot](https://github.com/Space27/JavaBackendSpring/actions/workflows/bot.yml/badge.svg)
![Scrapper](https://github.com/Space27/JavaBackendSpring/actions/workflows/scrapper.yml/badge.svg)# Link Tracker
### Автор: Локосов Даниил
Приложение для отслеживания обновлений контента по ссылкам (*GitHub* и *StackOverflow*).
При появлении новых событий отправляется уведомление в Telegram.Проект написан на `Java 21` с использованием `Spring Boot 3`.
Проект состоит из 2-х приложений:
* Bot
* ScrapperДля работы требуется БД `PostgreSQL`. Присутствует опциональная зависимость на `Kafka`.
## Стек
* `Java 21`
* `Spring Boot 3`
* Взаимодействие сервисов - `WebClient` `HttpInterface`
* БД - `PostgreSQL`
* Миграции - `Liquibase`
* Очередь сообщений - `Kafka`
* Взаимодействие с БД - `JDBC`(через JdbcClient) / `jOOQ` / `JPA`
* `Docker`
* Тесты - `JUnit 5` `Mockito` `WireMock` `TestContainers`
* Метрики - `Prometheus` `Grafana`## Команды бота
Список команд бота доступен через вкладку **Меню** в диалоге с ботом:
* `/help` - вывести список команд
* `/start` - регистрация пользователя
* `/end` - удаление пользователя
* `/track <ссылка>` - начать отслеживать ссылку
* `/untrack <ссылка>` - прекратить отслеживать ссылку
* `/list` - вывести список отслеживаемых ссылок## Запуск проекта
### Прямой запуск
1. Клонировать репозиторий
2. Конфигурационные файлы, в которых можно изменить модель Retry (fixed, linear, exponential), взаимодействие с БД (jdbc, jooq, jpa), а также использование очереди (true/false):
* [Bot](bot/src/main/resources/application.yml) - необходимо установить **telegram-token**
* [Scrapper](scrapper/src/main/resources/application.yml)
3. Собрать проект командой `mvn package -DskipTests` (ввести команду можно через терминал, открывающийся двойным
нажатием *Ctrl* в IntelliJ IDEA)
4. Поднять `PostgreSQL` и накатить [миграции](migrations) (можно выполнить при помощи команды
`docker compose up -d liquibase-migrations`)
5. Опционально поднять `Kafka` при помощи `docker compose up -d kafka1`
6. Опционально поднять `Grafana` при помощи `docker compose up -d grafana`
7. Запустить приложение [Scrapper](scrapper/src/main/java/edu/java/scrapper/ScrapperApplication.java),
затем [Bot](bot/src/main/java/edu/java/bot/BotApplication.java)### Запуск через Docker
Сервисы собраны в легковесные [Docker-образы](https://github.com/Space27?tab=packages&repo_name=JavaBackendSpring),
которые можно подтянуть с GitHub Packages.
Для ручной сборки образов необходимо предварительно собрать проект командой `mvn package -DskipTests`.1. Скопировать или скачать [compose.yml](compose.yml)
2. Скачать конфигурационные файлы [миграции](migrations) и [prometheus](prometheus.yml) или запустить
`docker compose run -d --rm files`
3. Указать в [compose.yml](compose.yml) **TELEGRAM_API_KEY** для bot
4. Выполнить `docker compose up -d bot`
5. Для выключения приложения `docker compose down`## Окружение проекта
* **Swagger UI**
* Bot [localhost:8090/swagger-ui](http://localhost:8090/swagger-ui/index.html)
* Scrapper [localhost:8080/swagger-ui](http://localhost:8080/swagger-ui/index.html)
* **Метрики** (доступны `info` `health` `metrics`)
* Bot [localhost:8091](http://localhost:8091)
* Scrapper [localhost:8081](http://localhost:8081)
* **Prometheus** [localhost:9090](http://localhost:9090) (внутри
Grafana [http://prometheus:9090](http://prometheus:9090))
* **Grafana** [localhost:3000](http://localhost:3000)
* Username: admin
* Password: admin