Перейти до основного вмісту

Публікації

Створення потоків в Java

Потоки в Java Потоки в Java – це механізм, який дозволяє виконувати декілька завдань одночасно в одному процесі. Вони особливо корисні для програм, які потребують паралельного виконання задач, таких як обробка великих обсягів даних, обслуговування багатокористувацьких систем або робота з мережевими з'єднаннями. Потік (Thread) – це окремий шлях виконання в межах програми. Кожен потік має свій власний стек викликів, але розділяє спільну пам'ять з іншими потоками в межах одного процесу. Способи стверення Успадкування класу Thread та перевизначити метод run() : class MyThread extends Thread { public void run() { System.out.println("Потік працює!"); } } Реалізувати інтерфейс Runnable та перевизначити метод run() : class MyRunnable implements Runnable { public void run() { System.out.println("Потік працює"); } } Використати лямбда-вирази (Java 8+): Thread thread = new Thread(() -> System.out.println("Потік пра...

Робота SpringBoot 3 з базою даних Redis

Redis Redis (Remote Dictionary Server) — це in-memory база даних ключ-значення з відкритим вихідним кодом, що використовується для зберігання структурованих даних. Вона підтримує різні типи даних, такі як рядки, списки, множини, упорядковані множини з діапазонами, хеші, бітові масиви, потоки і т. д. Redis широко використовується для кешування, управління сесіями, систем обміну повідомленнями, черг задач та інших сценаріїв, що вимагають високої продуктивності і низької затримки. Redis з SpringBoot Розглянемо простий проєкт на SpringBoot, що використовує Redis, як базу даних. Створимо такий проєкт: Створимо entity Cat: import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.redis.core.RedisHash; @Data @RedisHash("cat") public class Cat { @Id private String id; private String name; private Integer age; public Cat(String name, Integer age) { this.name = name; this.age = age; } } Звер...

Spring Boot Actuator

Actuator в Spring Boot - це бібліотека, яке надає різноманітну інформацію про стан вашого застосунку і його компонентів. Він дозволяє легко моніторити застосунок в режимі реального часу. Основні можливості actuator включають: Стан застосунку (/actuator/health): Цей ендпоінт повертає інформацію про стан застосунку. Це може бути корисно для моніторингу системи та виявлення будь-яких проблем. Інформація про стан містить загальну інформацію про стан. Інформація про середовище (/actuator/env): Цей ендпоінт надає доступ до інформації про середовище, в якому працює ваш застосунок. Ви можете отримати доступ до системних властивостей, змінних середовища, налаштувань ініціалізації та іншої важливої інформації. Метрики (/actuator/metrics): Цей ендпоінт надає статистику про різні показники застосунку, такі як кількість HTTP-запитів, використання пам'яті, кількість з'єднань з базою даних, час відповіді тощо. Ви можете використовувати ці метрики для аналізу продуктивності вашог...

Встановлення безкоштовного SSL сертифікату від Let's Encrypt на Ubuntu-сервер

SSL-сертифікат - важливий компонент сучасного web-сайту. Let's Encrypy надає можливість отримати такий сертифікат абсолютно безкоштовно. Сертифікат реєструється на 3 місяці. Після цього його можна автоматично продовжити. Розглянемо випадок, коли домен вже зареєстрований і налаштований на відповідний сервер. На сервері встановлена операційна система Ubuntu. Apache Server Для початку не сервері має бути встановлений та запущений web-сервер. Наприклад, Apache. Якщо це не зроблено, то потрібного його встановити. Оновлюємо apt: sudo apt update Встановлення Apache: sudo apt install apache2 Корисними будуть команди Перевірити статус: sudo systemctl status apache2.service Старт: sudo systemctl start apache2.service Зупинка: sudo systemctl stop apache2.service Рестарт: sudo systemctl restart apache2.service Certbot Сертифікат найпростіше згенерувати за допомогою Certbot. Детальну інструкцію можна отримати на сайті https://certbot.eff.org/ Далі команди, які використовують...

Встановлення Jenkins на Ubuntu

Встановлення Jenkins на Ubuntu 22.04 Оновлюємо список встановлених пакетів: sudo apt-get update На машині має бути встановлена одна із актуальних версій JDK. В даному прикладі використовується JDK 17. Як встановити та переключати версії Java на Ubuntu в попередній статті Підключаємо необхідний репозиторій. Для цього спершу додаємо GPG-ключ: curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null Додаємо репозиторій: echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null Для активації зроблених змін знову виконуємо команду sudo apt-get update Встановлюємо Jenkins: sudo apt install jenkins Запуск: sudo systemctl start jenkins Налаштування портів Jenkins використовує по замовчуванню порт 8080. Тому для роботи з Jenkins цей порт має бути відкритий. Перевіряємо статус ufw: sudo...

Встановлення docker на сервер з операційною системою Ubuntu

Встановлення docker на сервер з операційною системою Ubuntu 22.04 Встановдення docker на десктопний Ubuntu розглядається тут . Оновлюємо список встановлених пакетів: sudo apt update Встановлюємо пакети, які дозволяють apt працювати через HTTPS: sudo apt install apt-transport-https ca-certificates curl software-properties-common Додаємо GPG-ключ: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg Додаємо репозиторій Docker: echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null Знову оновлюємо пакети: sudo apt update Перевіряємо, чи зміни збереглися: apt-cache policy docker-ce Приблизний результат: docker-ce: Installed: (none) Candidate: 5:24.0.4-1~ubuntu.22.04~jammy Version table: 5:24.0.4-...

Проблема при запуску Liquibase на Digital Ocean та її вирішення

Нещодавно зустрівся з такою проблемою: SpringBoot-проєкт не запустився на сервері через проблему пов’язану з Liquibase. Детальніше про проєкт Сам проєкт повністю написаний на SpringBoot, база даних на MySQL, міграція здійснюється за допомогою Liquibase. Проєкт відносно невеликий і локально запускався і працював без проблем. Але при запуску на продакт-сервері отримувалася помилка: ERROR org.springframework.boot.SpringApplication [main] Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.DatabaseException: Unable to create or change a table without a primary key, when the system variable 'sql_require_primary_key' is set. Add a primary key to the table or unset this variable to avoid this me...