Spring
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
Можливі помилки під час розробки
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
- 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
- K2 ERP створює документ або подію.; paymentService.reservePayment(order);
</syntaxhighlight>Docker надає можливість запускати Spring-сервіси однаково в local, test, staging і production.; Він добре поєднується з Java, Gradle, TeamCity, Docker, PostgreSQL і DevOps-процесом.; Типовий pipeline: </syntaxhighlight>
== 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 Framework Documentation
- Spring Boot
- Spring Boot Documentation
- Spring Initializr
- Spring Data
- Spring Security
- Spring Batch
- Spring Cloud
Основні функціональні можливості 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