<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https://wiki.erp.kyiv.ua/index.php?action=history&amp;feed=atom&amp;title=Spring</id>
	<title>Spring - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.erp.kyiv.ua/index.php?action=history&amp;feed=atom&amp;title=Spring"/>
	<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=Spring&amp;action=history"/>
	<updated>2026-05-10T02:17:44Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=Spring&amp;diff=1178&amp;oldid=prev</id>
		<title>R: Первинна публікація</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=Spring&amp;diff=1178&amp;oldid=prev"/>
		<updated>2026-05-08T10:55:50Z</updated>

		<summary type="html">&lt;p&gt;Первинна публікація&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Spring&amp;#039;&amp;#039;&amp;#039; або &amp;#039;&amp;#039;&amp;#039;Spring Framework&amp;#039;&amp;#039;&amp;#039; — це популярний фреймворк для розробки Java-застосунків. Він використовується для створення backend-сервісів, REST API, вебзастосунків, мікросервісів, корпоративних систем, інтеграційних модулів, SaaS-платформ, ERP, CRM та інших бізнес-рішень.&lt;br /&gt;
&lt;br /&gt;
Spring надає інфраструктуру для керування залежностями, конфігурацією, транзакціями, вебзапитами, доступом до баз даних, безпекою, тестуванням, інтеграціями та побудовою масштабованих Java-застосунків. Офіційна документація Spring Framework охоплює IoC Container, Events, Resources, Validation, Data Binding, AOP, Testing, Data Access, Spring MVC, WebSocket і WebFlux.&amp;lt;div style=&amp;quot;background:#e8f4ff; border-left:5px solid #1e88e5; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Важливо:&amp;#039;&amp;#039;&amp;#039; Spring — це не одна бібліотека, а велика екосистема. До неї належать Spring Framework, Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch, Spring Integration та інші проєкти.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Загальний опис ==&lt;br /&gt;
Spring створений для спрощення розробки Java-застосунків. Він допомагає розробнику не писати всю інфраструктуру вручну, а використовувати готові механізми для типових задач: створення об’єктів, підключення сервісів, робота з базами даних, транзакції, REST API, авторизація, конфігурація, тестування і взаємодія із зовнішніми системами.&lt;br /&gt;
&lt;br /&gt;
Ключова ідея Spring — &amp;#039;&amp;#039;&amp;#039;Inversion of Control&amp;#039;&amp;#039;&amp;#039; і &amp;#039;&amp;#039;&amp;#039;Dependency Injection&amp;#039;&amp;#039;&amp;#039;. Замість того щоб кожен клас сам створював потрібні йому залежності, Spring керує об’єктами застосунку та передає залежності автоматично.&lt;br /&gt;
&lt;br /&gt;
На практиці Spring часто використовується разом зі Spring Boot. Spring Boot дозволяє швидко створювати stand-alone, production-grade Spring-застосунки, які можна запускати як звичайний Java-застосунок. Офіційна документація Spring Boot зазначає, що більшість Spring Boot-застосунків потребують мінімум Spring-конфігурації.&amp;lt;div style=&amp;quot;background:#fff8e1; border-left:5px solid #f9a825; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Зверніть увагу:&amp;#039;&amp;#039;&amp;#039; у розмовній мові «Spring» часто означає всю екосистему, а «Spring Boot» — конкретний інструмент для швидкого запуску Spring-застосунків із готовими налаштуваннями.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Для чого використовується Spring ==&lt;br /&gt;
Spring використовується для розробки:&lt;br /&gt;
&lt;br /&gt;
* REST API;&lt;br /&gt;
* backend-сервісів;&lt;br /&gt;
* вебзастосунків;&lt;br /&gt;
* мікросервісів;&lt;br /&gt;
* ERP-модулів;&lt;br /&gt;
* CRM-систем;&lt;br /&gt;
* SaaS-платформ;&lt;br /&gt;
* інтеграційних сервісів;&lt;br /&gt;
* сервісів обробки подій;&lt;br /&gt;
* систем електронного документообігу;&lt;br /&gt;
* платіжних модулів;&lt;br /&gt;
* сервісів роботи з базами даних;&lt;br /&gt;
* систем авторизації;&lt;br /&gt;
* batch-процесів;&lt;br /&gt;
* корпоративних застосунків.&lt;br /&gt;
&lt;br /&gt;
== Основні можливості Spring ==&lt;br /&gt;
Spring може забезпечувати такі можливості:&lt;br /&gt;
&lt;br /&gt;
* Dependency Injection;&lt;br /&gt;
* Inversion of Control;&lt;br /&gt;
* конфігурацію застосунку;&lt;br /&gt;
* роботу з beans;&lt;br /&gt;
* AOP;&lt;br /&gt;
* транзакції;&lt;br /&gt;
* доступ до баз даних;&lt;br /&gt;
* інтеграцію з JPA і Hibernate;&lt;br /&gt;
* роботу з JDBC;&lt;br /&gt;
* REST API;&lt;br /&gt;
* Spring MVC;&lt;br /&gt;
* WebFlux;&lt;br /&gt;
* валідацію;&lt;br /&gt;
* обробку помилок;&lt;br /&gt;
* тестування;&lt;br /&gt;
* безпеку через Spring Security;&lt;br /&gt;
* batch-обробку;&lt;br /&gt;
* інтеграцію з чергами;&lt;br /&gt;
* роботу з подіями;&lt;br /&gt;
* конфігурацію через properties або YAML;&lt;br /&gt;
* actuator endpoint-и;&lt;br /&gt;
* інтеграцію з Docker і Kubernetes у production-сценаріях.&lt;br /&gt;
&lt;br /&gt;
== Spring Framework ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Framework&amp;#039;&amp;#039;&amp;#039; — це основа екосистеми Spring. Він містить базові механізми для створення Java-застосунків.&lt;br /&gt;
&lt;br /&gt;
Основні частини Spring Framework:&lt;br /&gt;
&lt;br /&gt;
* Core Container;&lt;br /&gt;
* Beans;&lt;br /&gt;
* Context;&lt;br /&gt;
* Expression Language;&lt;br /&gt;
* AOP;&lt;br /&gt;
* Data Access;&lt;br /&gt;
* Transactions;&lt;br /&gt;
* Web MVC;&lt;br /&gt;
* WebFlux;&lt;br /&gt;
* Testing.&lt;br /&gt;
&lt;br /&gt;
Spring Framework можна використовувати без Spring Boot, але в сучасній розробці Spring Boot значно спрощує конфігурацію і запуск застосунків.&lt;br /&gt;
&lt;br /&gt;
== Spring Boot ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Boot&amp;#039;&amp;#039;&amp;#039; — це проєкт Spring, який спрощує створення самостійних production-ready застосунків. Він надає автоконфігурацію, starter-залежності, вбудовані web-сервери, Actuator, зручну структуру запуску і мінімум ручних налаштувань.&lt;br /&gt;
&lt;br /&gt;
Офіційна сторінка Spring Boot описує його як інструмент, який дозволяє легко створювати stand-alone, production-grade Spring based applications, які можна просто запускати.&lt;br /&gt;
&lt;br /&gt;
Типові можливості Spring Boot:&lt;br /&gt;
&lt;br /&gt;
* швидкий старт проєкту;&lt;br /&gt;
* автоконфігурація;&lt;br /&gt;
* starter-залежності;&lt;br /&gt;
* вбудований Tomcat, Jetty або Undertow;&lt;br /&gt;
* запуск через java -jar;&lt;br /&gt;
* profiles;&lt;br /&gt;
* externalized configuration;&lt;br /&gt;
* Actuator;&lt;br /&gt;
* health checks;&lt;br /&gt;
* metrics;&lt;br /&gt;
* production-ready налаштування;&lt;br /&gt;
* інтеграція з Maven і Gradle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#e8f5e9; border-left:5px solid #43a047; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Практичне застосування:&amp;#039;&amp;#039;&amp;#039; Spring Boot найчастіше використовують для швидкого створення REST API, мікросервісів, backend-модулів, інтеграційних сервісів і корпоративних застосунків.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dependency Injection ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dependency Injection&amp;#039;&amp;#039;&amp;#039; — це підхід, коли залежності класу передаються зовні, а не створюються всередині самого класу.&lt;br /&gt;
&lt;br /&gt;
Без Dependency Injection клас може сам створювати залежності:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class OrderService {&lt;br /&gt;
    private PaymentService paymentService = new PaymentService();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;У Spring залежність зазвичай передається через конструктор:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Service&lt;br /&gt;
public class OrderService {&lt;br /&gt;
    private final PaymentService paymentService;&lt;br /&gt;
&lt;br /&gt;
    public OrderService(PaymentService paymentService) {&lt;br /&gt;
        this.paymentService = paymentService;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Так код стає легше тестувати, підтримувати і змінювати.&lt;br /&gt;
&lt;br /&gt;
== Beans ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bean&amp;#039;&amp;#039;&amp;#039; у Spring — це об’єкт, яким керує Spring Container. Spring створює bean, налаштовує його, передає залежності й контролює його життєвий цикл.&lt;br /&gt;
&lt;br /&gt;
Bean може бути:&lt;br /&gt;
&lt;br /&gt;
* сервісом;&lt;br /&gt;
* репозиторієм;&lt;br /&gt;
* контролером;&lt;br /&gt;
* конфігураційним класом;&lt;br /&gt;
* клієнтом зовнішнього API;&lt;br /&gt;
* компонентом інтеграції;&lt;br /&gt;
* обробником подій;&lt;br /&gt;
* валідатором;&lt;br /&gt;
* mapper-ом.&lt;br /&gt;
&lt;br /&gt;
Типові анотації:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Component&lt;br /&gt;
@Service&lt;br /&gt;
@Repository&lt;br /&gt;
@Controller&lt;br /&gt;
@RestController&lt;br /&gt;
@Configuration&lt;br /&gt;
@Bean&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spring Container ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Container&amp;#039;&amp;#039;&amp;#039; відповідає за створення і керування beans.&lt;br /&gt;
&lt;br /&gt;
Він виконує такі задачі:&lt;br /&gt;
&lt;br /&gt;
* сканує компоненти;&lt;br /&gt;
* створює beans;&lt;br /&gt;
* передає залежності;&lt;br /&gt;
* читає конфігурацію;&lt;br /&gt;
* керує життєвим циклом об’єктів;&lt;br /&gt;
* застосовує AOP;&lt;br /&gt;
* забезпечує доступ до ApplicationContext.&lt;br /&gt;
&lt;br /&gt;
== Конфігурація ==&lt;br /&gt;
Spring підтримує різні способи конфігурації:&lt;br /&gt;
&lt;br /&gt;
* Java configuration;&lt;br /&gt;
* annotations;&lt;br /&gt;
* application.properties;&lt;br /&gt;
* application.yml;&lt;br /&gt;
* environment variables;&lt;br /&gt;
* profiles;&lt;br /&gt;
* command-line arguments;&lt;br /&gt;
* external configuration;&lt;br /&gt;
* configuration classes.&lt;br /&gt;
&lt;br /&gt;
Приклад application.yml:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
server:&lt;br /&gt;
  port: 8080&lt;br /&gt;
&lt;br /&gt;
spring:&lt;br /&gt;
  datasource:&lt;br /&gt;
    url: jdbc:postgresql://localhost:5432/k2&lt;br /&gt;
    username: k2_user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;div style=&amp;quot;background:#fff3e0; border-left:5px solid #fb8c00; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Рекомендація:&amp;#039;&amp;#039;&amp;#039; паролі, токени, private keys і production connection strings не варто зберігати у відкритому application.yml. Для цього потрібно використовувати змінні середовища або secret-сховища.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spring MVC ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring MVC&amp;#039;&amp;#039;&amp;#039; — це модуль для створення web-застосунків і REST API на основі servlet-моделі.&lt;br /&gt;
&lt;br /&gt;
Spring MVC використовується для:&lt;br /&gt;
&lt;br /&gt;
* HTTP endpoint-ів;&lt;br /&gt;
* REST API;&lt;br /&gt;
* web-контролерів;&lt;br /&gt;
* обробки JSON;&lt;br /&gt;
* валідації запитів;&lt;br /&gt;
* обробки помилок;&lt;br /&gt;
* роботи з path variables;&lt;br /&gt;
* роботи з query parameters;&lt;br /&gt;
* завантаження файлів;&lt;br /&gt;
* повернення HTTP-відповідей.&lt;br /&gt;
&lt;br /&gt;
Приклад REST-контролера:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@RestController&lt;br /&gt;
@RequestMapping(&amp;quot;/api/orders&amp;quot;)&lt;br /&gt;
public class OrderController {&lt;br /&gt;
    private final OrderService orderService;&lt;br /&gt;
&lt;br /&gt;
    public OrderController(OrderService orderService) {&lt;br /&gt;
        this.orderService = orderService;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @GetMapping(&amp;quot;/{id}&amp;quot;)&lt;br /&gt;
    public OrderDto getOrder(@PathVariable Long id) {&lt;br /&gt;
        return orderService.getOrder(id);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spring WebFlux ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring WebFlux&amp;#039;&amp;#039;&amp;#039; — це reactive web framework у Spring. Він використовується для асинхронних і неблокуючих web-застосунків.&lt;br /&gt;
&lt;br /&gt;
WebFlux може бути корисним, коли система має багато одночасних I/O-операцій:&lt;br /&gt;
&lt;br /&gt;
* звернення до зовнішніх API;&lt;br /&gt;
* streaming;&lt;br /&gt;
* websocket;&lt;br /&gt;
* reactive pipelines;&lt;br /&gt;
* високонавантажені сервіси;&lt;br /&gt;
* асинхронна обробка даних.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffebee; border-left:5px solid #e53935; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Не плутати:&amp;#039;&amp;#039;&amp;#039; Spring MVC і Spring WebFlux — це різні web-підходи. Для більшості звичайних REST API достатньо Spring MVC, а WebFlux потрібен тоді, коли справді є потреба в reactive-моделі.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spring Data ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Data&amp;#039;&amp;#039;&amp;#039; — це сімейство проєктів для спрощення роботи з даними. Воно допомагає створювати репозиторії, працювати з базами даних і зменшувати кількість шаблонного коду.&lt;br /&gt;
&lt;br /&gt;
Spring Data може використовуватися з:&lt;br /&gt;
&lt;br /&gt;
* JPA;&lt;br /&gt;
* JDBC;&lt;br /&gt;
* R2DBC;&lt;br /&gt;
* MongoDB;&lt;br /&gt;
* Redis;&lt;br /&gt;
* Elasticsearch;&lt;br /&gt;
* Cassandra;&lt;br /&gt;
* Neo4j;&lt;br /&gt;
* іншими сховищами даних.&lt;br /&gt;
&lt;br /&gt;
Приклад Spring Data JPA repository:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public interface OrderRepository extends JpaRepository&amp;lt;Order, Long&amp;gt; {&lt;br /&gt;
    List&amp;lt;Order&amp;gt; findByCustomerId(Long customerId);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spring Security ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Security&amp;#039;&amp;#039;&amp;#039; — це проєкт для автентифікації, авторизації та захисту застосунків.&lt;br /&gt;
&lt;br /&gt;
Spring Security може забезпечувати:&lt;br /&gt;
&lt;br /&gt;
* login;&lt;br /&gt;
* logout;&lt;br /&gt;
* roles;&lt;br /&gt;
* permissions;&lt;br /&gt;
* password hashing;&lt;br /&gt;
* JWT;&lt;br /&gt;
* OAuth2;&lt;br /&gt;
* OpenID Connect;&lt;br /&gt;
* CSRF protection;&lt;br /&gt;
* CORS configuration;&lt;br /&gt;
* method-level security;&lt;br /&gt;
* security filters;&lt;br /&gt;
* захист REST API.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#e0f2f1; border-left:5px solid #00897b; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Для бізнес-систем:&amp;#039;&amp;#039;&amp;#039; Spring Security важливий для ERP, CRM і SaaS, де потрібно контролювати ролі користувачів, доступ до документів, API, фінансових даних і адміністративних функцій.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spring Transactions ==&lt;br /&gt;
Spring має зручну модель керування транзакціями. Вона дозволяє позначити метод як транзакційний, а Spring сам відкриє, підтвердить або відкотить транзакцію.&lt;br /&gt;
&lt;br /&gt;
Приклад:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Transactional&lt;br /&gt;
public void createOrder(CreateOrderRequest request) {&lt;br /&gt;
    Order order = orderService.create(request);&lt;br /&gt;
    paymentService.reservePayment(order);&lt;br /&gt;
    inventoryService.reserveItems(order);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Транзакції особливо важливі для:&lt;br /&gt;
&lt;br /&gt;
* документів ERP;&lt;br /&gt;
* оплат;&lt;br /&gt;
* складських рухів;&lt;br /&gt;
* замовлень;&lt;br /&gt;
* бухгалтерських проводок;&lt;br /&gt;
* резервів;&lt;br /&gt;
* інтеграцій із критичними даними.&lt;br /&gt;
&lt;br /&gt;
== Spring Batch ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Batch&amp;#039;&amp;#039;&amp;#039; — це фреймворк для batch-обробки великих обсягів даних.&lt;br /&gt;
&lt;br /&gt;
Він може використовуватися для:&lt;br /&gt;
&lt;br /&gt;
* імпорту файлів;&lt;br /&gt;
* експорту даних;&lt;br /&gt;
* нічних обробок;&lt;br /&gt;
* масового перерахунку;&lt;br /&gt;
* синхронізації каталогів;&lt;br /&gt;
* формування звітів;&lt;br /&gt;
* обробки банківських виписок;&lt;br /&gt;
* формування SAF-T UA;&lt;br /&gt;
* масового оновлення залишків;&lt;br /&gt;
* інтеграційних задач.&lt;br /&gt;
&lt;br /&gt;
== Spring Integration ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Integration&amp;#039;&amp;#039;&amp;#039; — це проєкт для побудови інтеграційних потоків між системами.&lt;br /&gt;
&lt;br /&gt;
Він може використовуватися для:&lt;br /&gt;
&lt;br /&gt;
* обміну повідомленнями;&lt;br /&gt;
* інтеграції через файли;&lt;br /&gt;
* інтеграції через HTTP;&lt;br /&gt;
* інтеграції через черги;&lt;br /&gt;
* маршрутизації повідомлень;&lt;br /&gt;
* трансформації форматів;&lt;br /&gt;
* адаптерів до зовнішніх систем;&lt;br /&gt;
* побудови integration pipelines.&lt;br /&gt;
&lt;br /&gt;
== Spring Cloud ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Cloud&amp;#039;&amp;#039;&amp;#039; — це набір інструментів для мікросервісної та cloud-native архітектури.&lt;br /&gt;
&lt;br /&gt;
Spring Cloud може використовуватися для:&lt;br /&gt;
&lt;br /&gt;
* service discovery;&lt;br /&gt;
* centralized configuration;&lt;br /&gt;
* API gateway;&lt;br /&gt;
* circuit breaker;&lt;br /&gt;
* distributed tracing;&lt;br /&gt;
* load balancing;&lt;br /&gt;
* cloud integrations;&lt;br /&gt;
* event-driven systems.&lt;br /&gt;
&lt;br /&gt;
== Spring Actuator ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Boot Actuator&amp;#039;&amp;#039;&amp;#039; додає production-ready endpoint-и для моніторингу та керування застосунком.&lt;br /&gt;
&lt;br /&gt;
Actuator може надавати:&lt;br /&gt;
&lt;br /&gt;
* health check;&lt;br /&gt;
* metrics;&lt;br /&gt;
* info;&lt;br /&gt;
* environment;&lt;br /&gt;
* beans;&lt;br /&gt;
* mappings;&lt;br /&gt;
* loggers;&lt;br /&gt;
* readiness;&lt;br /&gt;
* liveness;&lt;br /&gt;
* custom health indicators.&lt;br /&gt;
&lt;br /&gt;
У production Actuator потрібно налаштовувати обережно, щоб не відкривати зайву технічну інформацію.&lt;br /&gt;
&lt;br /&gt;
== Spring Initializr ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Initializr&amp;#039;&amp;#039;&amp;#039; — це сервіс для швидкого створення Spring Boot-проєкту. Через нього можна вибрати мову, build-систему, версію Spring Boot, залежності та отримати готовий шаблон проєкту.&lt;br /&gt;
&lt;br /&gt;
Типові залежності:&lt;br /&gt;
&lt;br /&gt;
* Spring Web;&lt;br /&gt;
* Spring Data JPA;&lt;br /&gt;
* Spring Security;&lt;br /&gt;
* PostgreSQL Driver;&lt;br /&gt;
* Validation;&lt;br /&gt;
* Actuator;&lt;br /&gt;
* Lombok;&lt;br /&gt;
* Flyway;&lt;br /&gt;
* Liquibase;&lt;br /&gt;
* Spring Batch.&lt;br /&gt;
&lt;br /&gt;
== Maven і Gradle у Spring ==&lt;br /&gt;
Spring-проєкти зазвичай збираються через Maven або Gradle.&lt;br /&gt;
&lt;br /&gt;
Приклад Gradle-залежності:&amp;lt;syntaxhighlight lang=&amp;quot;kotlin&amp;quot;&amp;gt;&lt;br /&gt;
dependencies {&lt;br /&gt;
    implementation(&amp;quot;org.springframework.boot:spring-boot-starter-web&amp;quot;)&lt;br /&gt;
    implementation(&amp;quot;org.springframework.boot:spring-boot-starter-data-jpa&amp;quot;)&lt;br /&gt;
    testImplementation(&amp;quot;org.springframework.boot:spring-boot-starter-test&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Приклад Maven-залежності:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
&amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типова структура Spring Boot-проєкту ==&lt;br /&gt;
Типова структура може виглядати так:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
src/&lt;br /&gt;
  main/&lt;br /&gt;
    java/&lt;br /&gt;
      com/example/app/&lt;br /&gt;
        AppApplication.java&lt;br /&gt;
        controller/&lt;br /&gt;
        service/&lt;br /&gt;
        repository/&lt;br /&gt;
        entity/&lt;br /&gt;
        dto/&lt;br /&gt;
        config/&lt;br /&gt;
        integration/&lt;br /&gt;
    resources/&lt;br /&gt;
      application.yml&lt;br /&gt;
  test/&lt;br /&gt;
    java/&lt;br /&gt;
      com/example/app/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spring у K2 ERP ==&lt;br /&gt;
У контексті &amp;#039;&amp;#039;&amp;#039;K2 ERP&amp;#039;&amp;#039;&amp;#039; Spring може використовуватися для розробки backend-сервісів, API, інтеграційних модулів, batch-процесів, мікросервісів і допоміжних технічних компонентів.&lt;br /&gt;
&lt;br /&gt;
Spring може бути корисним для:&lt;br /&gt;
&lt;br /&gt;
* REST API K2 ERP;&lt;br /&gt;
* інтеграцій із ДПС;&lt;br /&gt;
* інтеграцій із ПРРО;&lt;br /&gt;
* інтеграцій із LiqPay;&lt;br /&gt;
* інтеграцій із M.E.Doc;&lt;br /&gt;
* інтеграцій із EDIN;&lt;br /&gt;
* інтеграцій із СОТА;&lt;br /&gt;
* інтеграцій із FREDO;&lt;br /&gt;
* модулів Shopify;&lt;br /&gt;
* модулів Magento;&lt;br /&gt;
* модулів Wix;&lt;br /&gt;
* модуля Prom;&lt;br /&gt;
* формування SAF-T UA;&lt;br /&gt;
* обробки е-ТТН;&lt;br /&gt;
* роботи з чергами;&lt;br /&gt;
* batch-обробки;&lt;br /&gt;
* авторизації користувачів;&lt;br /&gt;
* роботи з PostgreSQL або іншими базами даних.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ede7f6; border-left:5px solid #5e35b1; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Для K2 ERP:&amp;#039;&amp;#039;&amp;#039; Spring доцільно використовувати для backend-логіки, REST API, інтеграцій, batch-обробок і мікросервісів. Він добре поєднується з Java, Gradle, TeamCity, Docker, PostgreSQL і DevOps-процесом.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типовий сценарій Spring-сервісу для K2 ERP ==&lt;br /&gt;
Типовий Spring-сервіс інтеграції може працювати так:&lt;br /&gt;
&lt;br /&gt;
# K2 ERP створює документ або подію.&lt;br /&gt;
# Spring-сервіс отримує запит через REST API або чергу.&lt;br /&gt;
# Сервіс перевіряє вхідні дані.&lt;br /&gt;
# Сервіс перетворює дані у формат зовнішньої системи.&lt;br /&gt;
# За потреби виконується підписання, валідація або формування XML.&lt;br /&gt;
# Сервіс надсилає запит до зовнішнього API.&lt;br /&gt;
# Отримується відповідь.&lt;br /&gt;
# Статус повертається в K2 ERP.&lt;br /&gt;
# У журналі зберігаються технічні дані, помилки і результат обміну.&lt;br /&gt;
&lt;br /&gt;
== Spring і бази даних ==&lt;br /&gt;
Spring часто використовується з реляційними базами даних.&lt;br /&gt;
&lt;br /&gt;
Типові СУБД:&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL;&lt;br /&gt;
* MySQL;&lt;br /&gt;
* MariaDB;&lt;br /&gt;
* Oracle Database;&lt;br /&gt;
* Microsoft SQL Server;&lt;br /&gt;
* H2 для тестів;&lt;br /&gt;
* SQLite в окремих сценаріях.&lt;br /&gt;
&lt;br /&gt;
Для роботи з базами можуть використовуватися:&lt;br /&gt;
&lt;br /&gt;
* Spring JDBC;&lt;br /&gt;
* Spring Data JPA;&lt;br /&gt;
* Hibernate;&lt;br /&gt;
* Flyway;&lt;br /&gt;
* Liquibase;&lt;br /&gt;
* Transaction Management;&lt;br /&gt;
* connection pool;&lt;br /&gt;
* repository layer.&lt;br /&gt;
&lt;br /&gt;
== Spring і Docker ==&lt;br /&gt;
Spring Boot-застосунки часто упаковуються в Docker-образи.&lt;br /&gt;
&lt;br /&gt;
Типовий Dockerfile:&amp;lt;syntaxhighlight lang=&amp;quot;docker&amp;quot;&amp;gt;&lt;br /&gt;
FROM eclipse-temurin:21-jre&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
COPY build/libs/app.jar app.jar&lt;br /&gt;
ENTRYPOINT [&amp;quot;java&amp;quot;, &amp;quot;-jar&amp;quot;, &amp;quot;app.jar&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Docker дозволяє запускати Spring-сервіси однаково в local, test, staging і production.&lt;br /&gt;
&lt;br /&gt;
== Spring і Kubernetes ==&lt;br /&gt;
Spring Boot-сервіси можуть запускатися в Kubernetes.&lt;br /&gt;
&lt;br /&gt;
У Kubernetes важливо налаштувати:&lt;br /&gt;
&lt;br /&gt;
* deployment;&lt;br /&gt;
* service;&lt;br /&gt;
* config maps;&lt;br /&gt;
* secrets;&lt;br /&gt;
* liveness probe;&lt;br /&gt;
* readiness probe;&lt;br /&gt;
* resource limits;&lt;br /&gt;
* autoscaling;&lt;br /&gt;
* logs;&lt;br /&gt;
* metrics;&lt;br /&gt;
* ingress;&lt;br /&gt;
* rolling update;&lt;br /&gt;
* rollback.&lt;br /&gt;
&lt;br /&gt;
== Spring і DevOps ==&lt;br /&gt;
Spring добре вписується в DevOps-процес.&lt;br /&gt;
&lt;br /&gt;
Типовий pipeline:&lt;br /&gt;
&lt;br /&gt;
# Git commit.&lt;br /&gt;
# TeamCity запускає build.&lt;br /&gt;
# Gradle виконує clean test build.&lt;br /&gt;
# Запускаються unit та integration tests.&lt;br /&gt;
# Створюється Docker image.&lt;br /&gt;
# Image публікується в registry.&lt;br /&gt;
# Застосунок розгортається в test.&lt;br /&gt;
# Виконуються smoke-тести.&lt;br /&gt;
# Після підтвердження виконується deployment у production.&lt;br /&gt;
# Actuator і моніторинг перевіряють стан сервісу.&lt;br /&gt;
&lt;br /&gt;
== Тестування Spring-застосунків ==&lt;br /&gt;
Spring має розвинену підтримку тестування.&lt;br /&gt;
&lt;br /&gt;
Можна використовувати:&lt;br /&gt;
&lt;br /&gt;
* JUnit;&lt;br /&gt;
* Mockito;&lt;br /&gt;
* Spring Boot Test;&lt;br /&gt;
* MockMvc;&lt;br /&gt;
* TestRestTemplate;&lt;br /&gt;
* WebTestClient;&lt;br /&gt;
* Testcontainers;&lt;br /&gt;
* H2;&lt;br /&gt;
* WireMock.&lt;br /&gt;
&lt;br /&gt;
Типові тести:&lt;br /&gt;
&lt;br /&gt;
* unit-тести сервісів;&lt;br /&gt;
* repository-тести;&lt;br /&gt;
* controller-тести;&lt;br /&gt;
* integration-тести;&lt;br /&gt;
* API-тести;&lt;br /&gt;
* contract-тести;&lt;br /&gt;
* тести транзакцій;&lt;br /&gt;
* тести інтеграцій із зовнішніми API.&lt;br /&gt;
&lt;br /&gt;
== Безпека Spring-застосунків ==&lt;br /&gt;
Для безпечної розробки на Spring потрібно контролювати:&lt;br /&gt;
&lt;br /&gt;
* Spring Security;&lt;br /&gt;
* автентифікацію;&lt;br /&gt;
* авторизацію;&lt;br /&gt;
* ролі;&lt;br /&gt;
* права доступу;&lt;br /&gt;
* захист REST API;&lt;br /&gt;
* CORS;&lt;br /&gt;
* CSRF для web-сценаріїв;&lt;br /&gt;
* JWT;&lt;br /&gt;
* OAuth2;&lt;br /&gt;
* OpenID Connect;&lt;br /&gt;
* валідацію вхідних даних;&lt;br /&gt;
* SQL injection;&lt;br /&gt;
* secrets management;&lt;br /&gt;
* dependency scanning;&lt;br /&gt;
* логування без секретів.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffebee; border-left:5px solid #e53935; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Безпека:&amp;#039;&amp;#039;&amp;#039; у Spring-застосунках не можна виводити в логи паролі, access tokens, private keys, повні реквізити платіжних карток, ключі електронного підпису або зайві персональні дані.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Дані, які не варто зберігати в коді ==&lt;br /&gt;
У Spring-проєкті не варто зберігати безпосередньо в коді:&lt;br /&gt;
&lt;br /&gt;
* паролі;&lt;br /&gt;
* токени API;&lt;br /&gt;
* private keys;&lt;br /&gt;
* production connection strings;&lt;br /&gt;
* секрети електронного підпису;&lt;br /&gt;
* сертифікати;&lt;br /&gt;
* повні персональні дані клієнтів;&lt;br /&gt;
* доступи до платіжних систем;&lt;br /&gt;
* доступи до ДПС;&lt;br /&gt;
* доступи до ЕДО;&lt;br /&gt;
* ключі до хмарних сервісів.&lt;br /&gt;
&lt;br /&gt;
Такі дані потрібно зберігати в захищених конфігураціях, secret-сховищах або змінних середовища.&lt;br /&gt;
&lt;br /&gt;
== Можливі помилки під час розробки ==&lt;br /&gt;
Під час роботи зі Spring можуть виникати такі помилки:&lt;br /&gt;
&lt;br /&gt;
* неправильна конфігурація beans;&lt;br /&gt;
* circular dependency;&lt;br /&gt;
* помилка dependency injection;&lt;br /&gt;
* неправильний profile;&lt;br /&gt;
* неправильна конфігурація datasource;&lt;br /&gt;
* помилки міграцій бази;&lt;br /&gt;
* LazyInitializationException;&lt;br /&gt;
* неправильні транзакції;&lt;br /&gt;
* N+1 query problem;&lt;br /&gt;
* неправильні security rules;&lt;br /&gt;
* відкриті Actuator endpoint-и;&lt;br /&gt;
* помилки JSON serialization;&lt;br /&gt;
* неправильна обробка exceptions;&lt;br /&gt;
* дублювання бізнес-логіки в controller;&lt;br /&gt;
* відсутність тестів;&lt;br /&gt;
* зберігання секретів у application.yml.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#fff3e0; border-left:5px solid #fb8c00; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Рекомендація:&amp;#039;&amp;#039;&amp;#039; у Spring-проєктах бажано розділяти controller, service, repository, dto, entity, config та integration-шари. Це робить код зрозумілішим і спрощує тестування.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Переваги Spring ==&lt;br /&gt;
До основних переваг Spring можна віднести:&lt;br /&gt;
&lt;br /&gt;
* зрілу екосистему;&lt;br /&gt;
* велику спільноту;&lt;br /&gt;
* зручний Dependency Injection;&lt;br /&gt;
* готові модулі для типових задач;&lt;br /&gt;
* Spring Boot для швидкого старту;&lt;br /&gt;
* хорошу підтримку REST API;&lt;br /&gt;
* зручну роботу з базами даних;&lt;br /&gt;
* транзакції;&lt;br /&gt;
* Spring Security;&lt;br /&gt;
* тестування;&lt;br /&gt;
* підтримку мікросервісів;&lt;br /&gt;
* інтеграцію з DevOps;&lt;br /&gt;
* підтримку Maven і Gradle;&lt;br /&gt;
* придатність для корпоративних систем.&lt;br /&gt;
&lt;br /&gt;
== Обмеження та ризики ==&lt;br /&gt;
Під час використання Spring потрібно враховувати:&lt;br /&gt;
&lt;br /&gt;
* складність великої екосистеми;&lt;br /&gt;
* потребу в розумінні конфігурації;&lt;br /&gt;
* можливість прихованої автоконфігурації;&lt;br /&gt;
* складність Spring Security для новачків;&lt;br /&gt;
* ризик надмірної кількості залежностей;&lt;br /&gt;
* потребу в контролі версій;&lt;br /&gt;
* потребу в тестах;&lt;br /&gt;
* потребу в моніторингу;&lt;br /&gt;
* потребу в правильному налаштуванні production;&lt;br /&gt;
* ризик відкриття службових endpoint-ів.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffebee; border-left:5px solid #e53935; padding:12px; margin:12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Не плутати:&amp;#039;&amp;#039;&amp;#039; Spring не замінює архітектуру застосунку. Він дає інструменти, але правильне розділення шарів, модель даних, безпека, транзакції, тести й DevOps залишаються відповідальністю команди.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Висновок ==&lt;br /&gt;
Spring — це одна з найпоширеніших екосистем для Java-розробки. Вона дозволяє створювати backend-сервіси, REST API, web-застосунки, мікросервіси, ERP-модулі, інтеграційні сервіси та корпоративні системи.&lt;br /&gt;
&lt;br /&gt;
Для K2 ERP Spring може бути корисним як технологічна основа для Java backend-сервісів, інтеграцій із ДПС, ЕДО, ПРРО, LiqPay, Shopify, Magento, Wix, Prom, SAF-T UA, е-ТТН, batch-обробок і мікросервісів. Найкраще Spring працює разом із Java, Gradle, TeamCity, Docker, PostgreSQL, YouTrack і DevOps-процесом.&lt;br /&gt;
&lt;br /&gt;
== Джерела ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.spring.io/spring-framework/reference/index.html Spring Framework Documentation]&lt;br /&gt;
* [https://spring.io/projects/spring-boot Spring Boot]&lt;br /&gt;
* [https://docs.spring.io/spring-boot/index.html Spring Boot Documentation]&lt;br /&gt;
* [https://start.spring.io/ Spring Initializr]&lt;br /&gt;
* [https://spring.io/projects/spring-data Spring Data]&lt;br /&gt;
* [https://spring.io/projects/spring-security Spring Security]&lt;br /&gt;
* [https://spring.io/projects/spring-batch Spring Batch]&lt;br /&gt;
* [https://spring.io/projects/spring-cloud Spring Cloud]&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
[[Java]]&lt;br /&gt;
&lt;br /&gt;
[[Gradle]]&lt;br /&gt;
&lt;br /&gt;
[[TeamCity]]&lt;br /&gt;
&lt;br /&gt;
[[YouTrack]]&lt;br /&gt;
&lt;br /&gt;
[[Rider]]&lt;br /&gt;
&lt;br /&gt;
[[IDE]]&lt;br /&gt;
&lt;br /&gt;
[[DevOps]]&lt;br /&gt;
&lt;br /&gt;
[[SaaS]]&lt;br /&gt;
&lt;br /&gt;
[[K2 Модуль Shopify]]&lt;br /&gt;
&lt;br /&gt;
[[K2 Модуль Magento]]&lt;br /&gt;
&lt;br /&gt;
[[K2 Модуль Wix]]&lt;br /&gt;
&lt;br /&gt;
[[Модуль Prom]]&lt;br /&gt;
&lt;br /&gt;
[[LiqPay]]&lt;br /&gt;
&lt;br /&gt;
[[ПРРО]]&lt;br /&gt;
&lt;br /&gt;
[[ДПС]]&lt;br /&gt;
&lt;br /&gt;
[[ЕДО]]&lt;br /&gt;
&lt;br /&gt;
[[SAF-T UA]]&lt;br /&gt;
&lt;br /&gt;
[[Е-ТТН]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
</feed>