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

Публікації

Показано дописи з міткою "Spring"

Робота Spring-застосунку через Tor

Якщо потрібно виконувати HTTP-запити через мережу Tor із Java-застосунку, найкраще використовувати окремий системний сервіс Tor, а не Tor Browser. Системний Tor працює у фоновому режимі, підтримує SOCKS-проксі, ControlPort та дозволяє програмно змінювати IP-адресу за допомогою команди SIGNAL NEWNYM . У цій інструкції розглянемо встановлення Tor на Ubuntu, налаштування SOCKS-проксі та інтеграцію зі Spring Boot через RestTemplate . Встановлення Tor Оновіть список пакетів та встановіть Tor: sudo apt update sudo apt install tor Переконайтеся, що сервіс працює: systemctl status tor Якщо сервіс не запущений: sudo systemctl start tor sudo systemctl enable tor Налаштування Tor Основний файл конфігурації знаходиться за адресою: /etc/tor/torrc Додайте до нього наступні параметри: # SOCKS-проксі SocksPort 9052 # Порт керування ControlPort 9051 # Використовуємо пароль CookieAuthentication 0 HashedControlPassword 16:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX У...

DatabaseClient в WebFlux

DatabaseClient у Spring WebFlux DatabaseClient — це низькорівневий реактивний API для роботи з реляційними базами даних у Spring WebFlux. Він входить до складу Spring Data R2DBC та дозволяє виконувати SQL-запити без використання блокуючого JDBC. Якщо JdbcTemplate є стандартним рішенням для Spring MVC, то DatabaseClient виконує аналогічну роль у реактивному стеку. Він надає простий спосіб виконання SQL-запитів, прив'язки параметрів та перетворення результатів у Java-об'єкти. DatabaseClient працює поверх драйвера R2DBC і повертає реактивні типи Mono<T> та Flux<T> , що дозволяє повністю зберігати неблокуючу модель виконання. DatabaseClient добре підходить у таких випадках: необхідно виконувати власні SQL-запити; потрібен повний контроль над SQL; проєкт використовує Spring WebFlux та R2DBC; запити занадто складні для похідних методів Repository; необхідно отримувати лише окремі поля, а не цілі сутності; потрібно виконувати JOIN, агрегатні функції або...

GraalVM Native Image для прискорення Java-застосунків

GraalVM Native Image GraalVM Native Image — це технологія попередньої компіляції (ahead-of-time — AOT) Java-застосунків у самостійні нативні виконувані файли (бінарники). На відміну від звичайної Java, де код виконується у Java Virtual Machine (JVM), Native Image створює файл, який працює безпосередньо в операційній системі, значно прискорюючи запуск (за мілісекунди) та зменшуючи використання пам'яті. Ключові особливості та переваги: Миттєвий запуск . Програми запускаються практично миттєво, що критично важливо для Serverless (наприклад, AWS Lambda) та мікросервісів. Низьке споживання пам'яті . Native Image споживає значно менше оперативної пам'яті, оскільки не потребує завантаження віртуальної машини JVM, метаданих класів та JIT-компілятора. Самодостатність . Створений виконуваний файл містить лише необхідний код програми та бібліотек, що робить його меншим за розміром, ніж JAR-файл разом із JRE. Безпека та ізоляція . Нативні образи забезпечують закриту систему, в...

Apache Camel для інтеграції сервісів

Уявіть, що ваш застосунок отримує замовлення через REST API, повинен зберегти їх у базі даних, відправити підтвердження на пошту, поставити завдання у RabbitMQ і записати лог у файл. Написати це вручну — реально, але нудно та схильно до помилок. Apache Camel робить такі речі декларативно. Що таке Apache Camel Apache Camel — це open-source інтеграційний фреймворк для JVM, який реалізує класичні Enterprise Integration Patterns (EIP) з однойменної книги Гоппе та Вульфа. Перший реліз вийшов у 2007 році, і фреймворк досі активно розвивається. Головна ідея: є маршрути (routes) — трубопроводи, якими «течуть» повідомлення від джерела ( from ) до одержувача ( to ). По дорозі повідомлення можна трансформувати, фільтрувати, маршрутизувати та збагачувати даними. Коротко: Camel — це клей між різнорідними системами. Він не замінює брокери черг, БД чи HTTP-сервери, а з'єднує їх між собою. Мінімальний приклад Читаємо CSV-файли з папки та відправляємо кожен рядок у чергу Ra...