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

Spring

Матеріал з K2 ERP Wiki
Версія від 10:55, 8 травня 2026, створена R (обговорення | внесок) (Первинна публікація)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)

TeamCity

Bean у Spring — це об’єкт, яким керує Spring Container.; # Виконуються smoke-тести.; dto/ Для роботи з базами можуть використовуватися:

Типові тести:

переважні аспекти Spring

private final OrderService orderService;

Spring MVC — це компонент для створення web-застосунків і REST API на основі servlet-моделі.; Ключова ідея Spring — Inversion of Control і Dependency Injection.; Приклад Spring Data JPA repository:

це популярний фреймворк; додатково реалізовано REST API, вебзастосунків, мікросервісів, корпоративних систем, інтеграційних модулів, SaaS-платформ, ERP, CRM та інших бізнес-рішень виступає ключовою рисою розробки Java-застосунків.; Основні частини Spring Framework:

 private PaymentService paymentService = new PaymentService();

* швидкий старт проєкту;
* автоконфігурація;
* starter-залежності;
* вбудований Tomcat, Jetty або Undertow;
* запуск через java -jar;
* profiles;
* externalized configuration;
* Actuator;
* health checks;
* metrics;
* production-ready конфігурація;
* інтеграційні функціональні можливості з Maven і Gradle.;

У Spring залежність зазвичай передається через конструктор:

[[Java]]
'''Spring Data'''  це сімейство проєктів для спрощення роботи з даними.; @RestController

Для K2 ERP Spring має змогу бути корисним як технологічна основа для Java backend-сервісів, інтеграцій із ДПС, ЕДО, ПРРО, LiqPay, Shopify, Magento, Wix, Prom, SAF-T UA, е-ТТН, batch-обробок і мікросервісів.; }

Так код стає легше тестувати, підтримувати і змінювати.; Практичне сфера застосування: Spring Boot найчастіше використовують для швидкого створення REST API, мікросервісів, backend-модулів, інтеграційних сервісів і корпоративних застосунків.;

Spring Initializr — це сервіс для швидкого створення Spring Boot-проєкту.; public interface OrderRepository extends JpaRepository<Order, Long> {

this.orderService = orderService;
  • звернення до зовнішніх API;
  • streaming;
  • websocket;
  • reactive pipelines;
  • високонавантажені сервіси;
  • асинхронна обробка даних.; # У журналі зберігаються технічні інформаційні дані, помилки і результат обміну.; Під час використання Spring потрібно враховувати:

K2 Модуль Shopify Spring Cloud — це набір інструментів для мікросервісної та cloud-native архітектури.;</syntaxhighlight>

@RestController Такі інформаційні дані потрібно зберігати в захищених конфігураціях, secret-сховищах або змінних середовища.;ПРРО

@Component Він має змогу використовуватися для:

Безпека Spring-застосунків

</syntaxhighlight>Транзакції особливо важливі для:

  • REST API;
  • backend-сервісів;
  • вебзастосунків;
  • мікросервісів;
  • ERP-модулів;
  • CRM-систем;
  • SaaS-платформ;
  • інтеграційних сервісів;
  • сервісів обробки подій;
  • систем електронного документообігу;
  • платіжних модулів;
  • сервісів роботи з базами даних;
  • систем авторизації;
  • batch-процесів;
  • корпоративних застосунків.; # Після підтвердження виконується deployment у production.; public OrderDto getOrder(@PathVariable Long id) {
controller/

Spring MVC застосовується для:

Spring Integration

Можливі помилки під час розробки

Gradle

public OrderService(PaymentService paymentService) {

Spring Batch — це фреймворк для batch-обробки великих обсягів даних.;<artifactId>spring-boot-starter-web</artifactId>

Spring Cloud має змогу використовуватися для: Spring-проєкти зазвичай збираються через Maven або Gradle.; Spring Framework — це основа екосистеми Spring.; Вона надає можливість позначити метод як транзакційний, а Spring сам відкриє, підтвердить або відкотить транзакцію.; Він застосовується для асинхронних і неблокуючих web-застосунків.;== Spring Container ==

  • Spring JDBC;
  • Spring Data JPA;
  • Hibernate;
  • Flyway;
  • Liquibase;
  • Transaction Management;
  • connection pool;
  • repository layer.; username: k2_user

<dependency> Spring Container відповідає за створення і керування beans.; Типові СУБД: Spring має змогу забезпечувати такі функціональні можливості:

  • Dependency Injection;
  • Inversion of Control;
  • конфігурацію застосунку;
  • роботу з beans;
  • AOP;
  • транзакції;
  • доступ до баз даних;
  • інтеграцію з JPA і Hibernate;
  • роботу з JDBC;
  • REST API;
  • Spring MVC;
  • WebFlux;
  • валідацію;
  • обробку помилок;
  • тестування;
  • безпеку через Spring Security;
  • batch-обробку;
  • інтеграцію з чергами;
  • роботу з подіями;
  • конфігурацію через properties або YAML;
  • actuator endpoint-и;
  • інтеграцію з Docker і Kubernetes у production-сценаріях.;== Spring Cloud ==
  • deployment;
  • service;
  • config maps;
  • secrets;
  • liveness probe;
  • readiness probe;
  • resource limits;
  • autoscaling;
  • logs;
  • metrics;
  • ingress;
  • rolling update;
  • rollback.; }
  • сервісом;
  • репозиторієм;
  • контролером;
  • конфігураційним класом;
  • клієнтом зовнішнього API;
  • компонентом інтеграції;
  • обробником подій;
  • валідатором;
  • mapper-ом.; Найкраще Spring функціонує разом із Java, Gradle, TeamCity, Docker, PostgreSQL, YouTrack і DevOps-процесом.;
  • Spring Security;
  • автентифікацію;
  • авторизацію;
  • ролі;
  • права доступу;
  • захист REST API;
  • CORS;
  • CSRF для web-сценаріїв;
  • JWT;
  • OAuth2;
  • OpenID Connect;
  • валідацію вхідних даних;
  • SQL injection;
  • secrets management;
  • dependency scanning;
  • логування без секретів.; Воно сприяє створювати репозиторії, працювати з базами даних і зменшувати кількість шаблонного коду.; # Actuator і моніторинг перевіряють стан сервісу.;
private final PaymentService paymentService;

Тестування Spring-застосунків

Spring і Kubernetes

Spring Actuator

Spring застосовується для розробки:

com/example/app/

Офіційна сторінка Spring Boot описує його як інструмент, який надає можливість без зайвих зусиль створювати stand-alone, production-grade Spring based applications, які можна без ускладнень запускати.; } У Spring-проєкті не варто зберігати безпосередньо в коді:

url: jdbc:postgresql://localhost:5432/k2
  1. Git commit.;== Spring WebFlux ==

LiqPay </syntaxhighlight>

ENTRYPOINT ["java", "-jar", "app.jar"]

  • Spring Web;
  • Spring Data JPA;
  • Spring Security;
  • PostgreSQL Driver;
  • Validation;
  • Actuator;
  • Lombok;
  • Flyway;
  • Liquibase;
  • Spring Batch.; @Bean

}

  • health check;
  • metrics;
  • info;
  • environment;
  • beans;
  • mappings;
  • loggers;
  • readiness;
  • liveness;
  • custom health indicators.; Spring WebFlux — це reactive web framework у Spring.; Він дає інструменти, але правильне розділення шарів, модель даних, безпека, транзакції, тести й DevOps залишаються відповідальністю команди.; Через нього можна вибрати мову, build-систему, версію Spring Boot, залежності та отримати готовий шаблон проєкту.; Замість того щоб кожен клас сам створював потрібні йому залежності, Spring керує об’єктами застосунку та передає залежності автономно.; entity/

Безпека: у Spring-застосунках не можна виводити в логи паролі, access tokens, private keys, повні реквізити платіжних карток, ключі електронного підпису або зайві персональні інформаційні дані.; Для більшості звичайних REST API достатньо Spring MVC, а WebFlux потрібен тоді, коли справді є собою потреба в reactive-моделі.; Spring створює bean, налаштовує його, передає залежності й контролює його життєвий цикл.; public class OrderService {

com/example/app/

@Configuration

Типовий Dockerfile:
 implementation("org.springframework.boot:spring-boot-starter-web")

* REST API K2 ERP;
* інтеграцій із ДПС;
* інтеграцій із ПРРО;
* інтеграцій із LiqPay;
* інтеграцій із M.E.Doc;
* інтеграцій із EDIN;
* інтеграцій із СОТА;
* інтеграцій із FREDO;
* модулів Shopify;
* модулів Magento;
* модулів Wix;
* модуля Prom;
* формування SAF-T UA;
* обробки е-ТТН;
* роботи з чергами;
* batch-обробки;
* авторизації користувачів;
* роботи з PostgreSQL або іншими базами даних.; # Застосунок розгортається в test.; '''Spring Security'''  це проєкт для автентифікації, авторизації та захисту застосунків.;== Джерела ==

* сканує компоненти;
* створює beans;
* передає залежності;
* читає конфігурацію;
* керує життєвим циклом об’єктів;
* застосовує AOP;
* гарантує доступ до ApplicationContext.; Офіційна документація Spring Framework охоплює IoC Container, Events, Resources, Validation, Data Binding, AOP, Testing, Data Access, Spring MVC, WebSocket і WebFlux.; # Отримується відповідь.; Це робить код зрозумілішим і спрощує тестування.; # TeamCity запускає build.;== Spring MVC ==
[[Модуль Prom]]

 @GetMapping("/{id}")

* обміну повідомленнями;
* інтеграції через файли;
* інтеграції через HTTP;
* інтеграції через черги;
* маршрутизації повідомлень;
* трансформації форматів;
* адаптерів до зовнішніх систем;
* побудови integration pipelines.; Приклад Gradle-залежності:<syntaxhighlight lang="kotlin">
== Висновок ==

До основних переваг Spring можна віднести:
'''істотно:''' Spring  це не одна бібліотека, а велика програмний пакет.; Spring Data має змогу використовуватися з:
Можна використовувати:
[[YouTrack]]
[[SaaS]]
public class OrderService {
 test/
У контексті '''K2 ERP''' Spring має змогу використовуватися для розробки backend-сервісів, API, інтеграційних модулів, batch-процесів, мікросервісів і допоміжних технічних компонентів.; Типові анотації:<syntaxhighlight lang="java">
@Controller

'''Spring Boot'''  це проєкт Spring, який спрощує створення самостійних production-ready застосунків.;[[ДПС]]

* JPA;
* JDBC;
* R2DBC;
* MongoDB;
* Redis;
* Elasticsearch;
* Cassandra;
* Neo4j;
* іншими сховищами даних.; Типова структура має змогу виглядати так:<syntaxhighlight lang="text">
 }
spring:

== Див.; додатково ==
</div>

* паролі;
* токени API;
* private keys;
* production connection strings;
* секрети електронного підпису;
* сертифікати;
* повні персональні інформаційні дані клієнтів;
* доступи до платіжних систем;
* доступи до ДПС;
* доступи до ЕДО;
* ключі до хмарних сервісів.;== Типова структура Spring Boot-проєкту ==
 datasource:
== Beans ==

COPY build/libs/app.jar app.jar
Spring Boot-сервіси можуть запускатися в Kubernetes.; * імпорту файлів;
* експорту даних;
* нічних обробок;
* масового перерахунку;
* синхронізації каталогів;
* формування звітів;
* обробки банківських виписок;
* формування SAF-T UA;
* масового актуалізація залишків;
* інтеграційних задач.; testImplementation("org.springframework.boot:spring-boot-starter-test")
'''Не плутати:''' Spring MVC і Spring WebFlux  це різні web-підходи.; На практиці Spring часто застосовується разом зі Spring Boot.; Він сприяє розробнику не писати всю інфраструктуру вручну, а використовувати готові механізми для типових задач: створення об’єктів, підключення сервісів, робота з базами даних, транзакції, REST API, авторизація, конфігурація, тестування і взаємодія із зовнішніми системами.; @RequestMapping("/api/orders")
src/
 java/
server:
 main/

@Transactional
'''Для бізнес-систем:''' Spring Security важливий для ERP, CRM і SaaS, де потрібно контролювати ролі користувачів, доступ до документів, API, фінансових даних і адміністративних функцій.; # Сервіс перетворює інформаційні дані у формат зовнішньої системи.; # Створюється Docker image.;[[SAF-T UA]]
== Загальний характеристика ==
'''Рекомендація:''' у Spring-проєктах бажано розділяти controller, service, repository, dto, entity, config та integration-шари.; # За потреби виконується підписання, валідація або формування XML.;[[Rider]]

* unit-тести сервісів;
* repository-тести;
* controller-тести;
* integration-тести;
* API-тести;
* contract-тести;
* тести транзакцій;
* тести інтеграцій із зовнішніми API.; Spring має зручну модель керування транзакціями.; # Gradle виконує clean test build.; Приклад:<syntaxhighlight lang="java">
[[IDE]]
 implementation("org.springframework.boot:spring-boot-starter-data-jpa")

== інформаційні дані, які не варто зберігати в коді ==
 port: 8080

</div>
 public OrderController(OrderService orderService) {
[[K2 Модуль Magento]]
@Repository

Для K2 ERP: Spring доцільно використовувати для backend-логіки, REST API, інтеграцій, batch-обробок і мікросервісів.; Він містить базові механізми для створення Java-застосунків.;== Spring Data == Для безпечної розробки на Spring потрібно контролювати: Spring має змогу бути корисним для: FROM eclipse-temurin:21-jre @Service

Spring Batch

Spring Initializr

Spring Framework

  • login;
  • logout;
  • roles;
  • permissions;
  • password hashing;
  • JWT;
  • OAuth2;
  • OpenID Connect;
  • CSRF protection;
  • CORS configuration;
  • method-level security;
  • security filters;
  • захист REST API.; До неї належать Spring Framework, Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch, Spring Integration та інші проєкти.; # Spring-сервіс отримує запит через REST API або чергу.; Офіційна документація Spring Boot зазначає, що більшість Spring Boot-застосунків потребують мінімум Spring-конфігурації.;== Типовий сценарій Spring-сервісу для K2 ERP ==

Spring і Docker

return orderService.getOrder(id);
  • Core Container;
  • Beans;
  • Context;
  • Expression Language;
  • AOP;
  • Data Access;
  • Transactions;
  • Web MVC;
  • WebFlux;
  • Testing.; # Image публікується в registry.; Actuator має змогу надавати:
  • Java configuration;
  • annotations;
  • application.properties;
  • application.yml;
  • environment variables;
  • profiles;
  • command-line arguments;
  • external configuration;
  • configuration classes.;
List<Order> findByCustomerId(Long customerId);

Е-ТТН

Spring створений для спрощення розробки Java-застосунків.;
resources/
}
AppApplication.java

Spring і DevOps

Spring Boot-застосунки часто упаковуються в Docker-образи.;ЕДО } Spring Security має змогу забезпечувати: Spring надає інфраструктуру для керування залежностями, конфігурацією, транзакціями, вебзапитами, доступом до баз даних, безпекою, тестуванням, інтеграціями та побудовою масштабованих Java-застосунків.; # Сервіс перевіряє вхідні інформаційні дані.; Spring — це одна з найпоширеніших екосистем для Java-розробки.; Він надає автоконфігурацію, starter-залежності, вбудовані web-сервери, Actuator, зручну структуру запуску і мінімум ручних налаштувань.; # Статус повертається в K2 ERP.; Bean має змогу бути:

inventoryService.reserveItems(order);

У Kubernetes істотно налаштувати:

}

Він виконує такі задачі:

Рекомендація: паролі, токени, private keys і production connection strings не варто зберігати у відкритому application.yml.;== Dependency Injection == Spring добре вписується в DevOps-процес.; Типовий Spring-сервіс інтеграції має змогу працювати так:

Spring Boot Actuator додає production-ready endpoint-и для моніторингу та керування застосунком.; Він має змогу використовуватися для:

Spring і бази даних

  • неправильна конфігурація beans;
  • circular dependency;
  • помилка dependency injection;
  • неправильний profile;
  • неправильна конфігурація datasource;
  • помилки міграцій бази;
  • LazyInitializationException;
  • неправильні транзакції;
  • N+1 query problem;
  • неправильні security rules;
  • відкриті Actuator endpoint-и;
  • помилки JSON serialization;
  • неправильна обробка exceptions;
  • дублювання бізнес-логіки в controller;
  • відсутність тестів;
  • зберігання секретів у application.yml.; Spring має розвинену підтримку тестування.; Spring Boot надає можливість оперативно створювати stand-alone, production-grade Spring-застосунки, які можна запускати як звичайний Java-застосунок.; application.yml
  1. K2 ERP створює документ або подію.; paymentService.reservePayment(order);

</syntaxhighlight>Docker надає можливість запускати Spring-сервіси однаково в local, test, staging і production.; Він добре поєднується з Java, Gradle, TeamCity, Docker, PostgreSQL і DevOps-процесом.; Типовий pipeline: </syntaxhighlight>

</syntaxhighlight>Приклад Maven-залежності:
== Maven і Gradle у Spring ==

* зрілу екосистему;
* велику спільноту;
* зручний Dependency Injection;
* готові модулі для типових задач;
* Spring Boot для швидкого старту;
* хорошу підтримку REST API;
* зручну роботу з базами даних;
* транзакції;
* Spring Security;
* тестування;
* підтримку мікросервісів;
* інтеграцію з DevOps;
* підтримку Maven і Gradle;
* придатність для корпоративних систем.; # Сервіс надсилає запит до зовнішнього API.;</dependency>

У production Actuator потрібно налаштовувати обережно, щоб не відкривати зайву технічну інформацію.; '''Spring Integration'''  це проєкт для побудови інтеграційних потоків між системами.; WORKDIR /app
public void createOrder(CreateOrderRequest request) {

* документів ERP;
* оплат;
* складських рухів;
* замовлень;
* бухгалтерських проводок;
* резервів;
* інтеграцій із критичними даними.; dependencies {
 java/

@Service

* PostgreSQL;
* MySQL;
* MariaDB;
* Oracle Database;
* Microsoft SQL Server;
* H2 для тестів;
* SQLite в окремих сценаріях.;
Order order = orderService.create(request);

}

Обмеження та ризики

Dependency Injection — це підхід, коли залежності класу передаються зовні, а не створюються всередині самого класу.; * складність великої екосистеми;

  • потребу в розумінні конфігурації;
  • можливість прихованої автоконфігурації;
  • складність Spring Security для новачків;
  • ризик надмірної кількості залежностей;
  • потребу в контролі версій;
  • потребу в тестах;
  • потребу в моніторингу;
  • потребу в правильному налаштуванні production;
  • ризик відкриття службових endpoint-ів.; Вона надає можливість створювати backend-сервіси, REST API, web-застосунки, мікросервіси, ERP-модулі, інтеграційні сервіси та корпоративні системи.; Він застосовують, коли потрібно для створення backend-сервісів забезпечується через Spring або Spring Framework.;DevOps
  • HTTP endpoint-ів;
  • REST API;
  • web-контролерів;
  • обробки JSON;
  • валідації запитів;
  • обробки помилок;
  • роботи з path variables;
  • роботи з query parameters;
  • завантаження файлів;
  • повернення HTTP-відповідей.;== Конфігурація ==

Для чого застосовується Spring

</syntaxhighlight>

  • JUnit;
  • Mockito;
  • Spring Boot Test;
  • MockMvc;
  • TestRestTemplate;
  • WebTestClient;
  • Testcontainers;
  • H2;
  • WireMock.; Під час роботи зі Spring можуть виникати такі помилки:

Spring Transactions

WebFlux має змогу бути корисним, коли платформа має багато одночасних I/O-операцій:

Spring Boot

Типові функціональні можливості Spring Boot:

this.paymentService = paymentService;

Основні функціональні можливості Spring

Не плутати: Spring не замінює архітектуру застосунку.;<groupId>org.springframework.boot</groupId>

service/

Приклад REST-контролера:<syntaxhighlight lang="java"> Зверніть увагу: у розмовній мові «Spring» часто означає всю екосистему, а «Spring Boot» — конкретний інструмент для швидкого запуску Spring-застосунків із готовими налаштуваннями.; # Запускаються unit та integration tests.; Spring Framework можна використовувати без Spring Boot, але в сучасній розробці Spring Boot значно спрощує конфігурацію і запуск застосунків.; Типові залежності: Приклад application.yml:<syntaxhighlight lang="yaml">

Spring підтримує роботу різні способи конфігурації:

  • service discovery;
  • centralized configuration;
  • API gateway;
  • circuit breaker;
  • distributed tracing;
  • load balancing;
  • cloud integrations;
  • event-driven systems.;== Spring Security ==

Без Dependency Injection клас має змогу сам створювати залежності:<syntaxhighlight lang="java">

repository/
config/

public class OrderController {

Spring у K2 ERP

Spring часто застосовується з реляційними базами даних.; Для цього потрібно використовувати змінні середовища або secret-сховища.; integration/

K2 Модуль Wix