{"id":23585650,"url":"https://github.com/space27/javabackendspring","last_synced_at":"2026-04-05T21:31:56.271Z","repository":{"id":223037712,"uuid":"753275330","full_name":"Space27/JavaBackendSpring","owner":"Space27","description":"Telegram Бот отслеживания изменений по ссылкам","archived":false,"fork":false,"pushed_at":"2024-12-04T21:06:00.000Z","size":409,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-27T03:16:05.590Z","etag":null,"topics":["docker","grafana","java","jdbc","jooq","junit5","kafka","liquibase","mockito","postgresql","prometheus","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Space27.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-05T19:59:25.000Z","updated_at":"2024-12-04T21:06:05.000Z","dependencies_parsed_at":"2024-12-03T19:25:45.328Z","dependency_job_id":"c0b433ad-ee32-406b-afb1-180d89e42655","html_url":"https://github.com/Space27/JavaBackendSpring","commit_stats":null,"previous_names":["space27/javabackendspring"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2FJavaBackendSpring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2FJavaBackendSpring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2FJavaBackendSpring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Space27%2FJavaBackendSpring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Space27","download_url":"https://codeload.github.com/Space27/JavaBackendSpring/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239412484,"owners_count":19634016,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","grafana","java","jdbc","jooq","junit5","kafka","liquibase","mockito","postgresql","prometheus","spring"],"created_at":"2024-12-27T03:16:14.273Z","updated_at":"2025-11-03T05:30:34.273Z","avatar_url":"https://github.com/Space27.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Bot](https://github.com/Space27/JavaBackendSpring/actions/workflows/bot.yml/badge.svg)\n![Scrapper](https://github.com/Space27/JavaBackendSpring/actions/workflows/scrapper.yml/badge.svg)\n\n# Link Tracker\n\n### Автор: Локосов Даниил\n\nПриложение для отслеживания обновлений контента по ссылкам (*GitHub* и *StackOverflow*).\nПри появлении новых событий отправляется уведомление в Telegram.\n\nПроект написан на `Java 21` с использованием `Spring Boot 3`.\n\nПроект состоит из 2-х приложений:\n\n* Bot\n* Scrapper\n\nДля работы требуется БД `PostgreSQL`. Присутствует опциональная зависимость на `Kafka`.\n\n## Стек\n\n* `Java 21`\n* `Spring Boot 3`\n* Взаимодействие сервисов - `WebClient` `HttpInterface`\n* БД - `PostgreSQL`\n* Миграции - `Liquibase`\n* Очередь сообщений - `Kafka`\n* Взаимодействие с БД - `JDBC`(через JdbcClient) / `jOOQ` / `JPA`\n* `Docker`\n* Тесты - `JUnit 5` `Mockito` `WireMock` `TestContainers`\n* Метрики - `Prometheus` `Grafana`\n\n## Команды бота\n\nСписок команд бота доступен через вкладку **Меню** в диалоге с ботом:\n\n* `/help` - вывести список команд\n* `/start` - регистрация пользователя\n* `/end` - удаление пользователя\n* `/track \u003cссылка\u003e` - начать отслеживать ссылку\n* `/untrack \u003cссылка\u003e` - прекратить отслеживать ссылку\n* `/list` - вывести список отслеживаемых ссылок\n\n## Запуск проекта\n\n### Прямой запуск\n\n1. Клонировать репозиторий\n2. Конфигурационные файлы, в которых можно изменить модель Retry (fixed, linear, exponential), взаимодействие с БД (jdbc, jooq, jpa), а также использование очереди (true/false):\n    * [Bot](bot/src/main/resources/application.yml) - необходимо установить **telegram-token**\n    * [Scrapper](scrapper/src/main/resources/application.yml)\n3. Собрать проект командой `mvn package -DskipTests` (ввести команду можно через терминал, открывающийся двойным\n   нажатием *Ctrl* в IntelliJ IDEA)\n4. Поднять `PostgreSQL` и накатить [миграции](migrations) (можно выполнить при помощи команды\n   `docker compose up -d liquibase-migrations`)\n5. Опционально поднять `Kafka` при помощи `docker compose up -d kafka1`\n6. Опционально поднять `Grafana` при помощи `docker compose up -d grafana`\n7. Запустить приложение [Scrapper](scrapper/src/main/java/edu/java/scrapper/ScrapperApplication.java),\n   затем [Bot](bot/src/main/java/edu/java/bot/BotApplication.java)\n\n### Запуск через Docker\n\nСервисы собраны в легковесные [Docker-образы](https://github.com/Space27?tab=packages\u0026repo_name=JavaBackendSpring),\nкоторые можно подтянуть с GitHub Packages.  \nДля ручной сборки образов необходимо предварительно собрать проект командой `mvn package -DskipTests`.\n\n1. Скопировать или скачать [compose.yml](compose.yml)\n2. Скачать конфигурационные файлы [миграции](migrations) и [prometheus](prometheus.yml) или запустить\n   `docker compose run -d --rm files`\n3. Указать в [compose.yml](compose.yml) **TELEGRAM_API_KEY** для bot\n4. Выполнить `docker compose up -d bot`\n5. Для выключения приложения `docker compose down`\n\n## Окружение проекта\n\n* **Swagger UI**\n    * Bot [localhost:8090/swagger-ui](http://localhost:8090/swagger-ui/index.html)\n    * Scrapper [localhost:8080/swagger-ui](http://localhost:8080/swagger-ui/index.html)\n* **Метрики** (доступны `info` `health` `metrics`)\n    * Bot [localhost:8091](http://localhost:8091)\n    * Scrapper [localhost:8081](http://localhost:8081)\n* **Prometheus** [localhost:9090](http://localhost:9090) (внутри\n  Grafana [http://prometheus:9090](http://prometheus:9090))\n* **Grafana** [localhost:3000](http://localhost:3000)\n    * Username: admin\n    * Password: admin\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspace27%2Fjavabackendspring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspace27%2Fjavabackendspring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspace27%2Fjavabackendspring/lists"}