<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https://wiki.corp2.eu/index.php?action=history&amp;feed=atom&amp;title=Spring</id>
	<title>Spring - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.corp2.eu/index.php?action=history&amp;feed=atom&amp;title=Spring"/>
	<link rel="alternate" type="text/html" href="https://wiki.corp2.eu/index.php?title=Spring&amp;action=history"/>
	<updated>2026-07-06T03:20:04Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.corp2.eu/index.php?title=Spring&amp;diff=1178&amp;oldid=prev</id>
		<title>R: Первинна публікація</title>
		<link rel="alternate" type="text/html" href="https://wiki.corp2.eu/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;[[TeamCity]] &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bean&amp;#039;&amp;#039;&amp;#039; у Spring — це об’єкт, яким керує Spring Container.; # Виконуються smoke-тести.; dto/&lt;br /&gt;
Для роботи з базами можуть використовуватися:&lt;br /&gt;
&lt;br /&gt;
Типові тести:&lt;br /&gt;
== переважні аспекти Spring ==&lt;br /&gt;
 private final OrderService orderService;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring MVC&amp;#039;&amp;#039;&amp;#039; — це компонент для створення web-застосунків і REST API на основі servlet-моделі.; Ключова ідея 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 Data JPA repository:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
це популярний фреймворк; додатково реалізовано REST API, вебзастосунків, мікросервісів, корпоративних систем, інтеграційних модулів, SaaS-платформ, ERP, CRM та інших бізнес-рішень виступає ключовою рисою розробки Java-застосунків.; Основні частини Spring Framework:&lt;br /&gt;
&lt;br /&gt;
 private PaymentService paymentService = new PaymentService();&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.;&amp;lt;/syntaxhighlight&amp;gt;У Spring залежність зазвичай передається через конструктор:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
[[Java]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Data&amp;#039;&amp;#039;&amp;#039; — це сімейство проєктів для спрощення роботи з даними.; @RestController&lt;br /&gt;
&lt;br /&gt;
Для K2 ERP Spring має змогу бути корисним як технологічна основа для Java backend-сервісів, інтеграцій із ДПС, ЕДО, ПРРО, LiqPay, Shopify, Magento, Wix, Prom, SAF-T UA, е-ТТН, batch-обробок і мікросервісів.; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Так код стає легше тестувати, підтримувати і змінювати.; &amp;#039;&amp;#039;&amp;#039;Практичне сфера застосування:&amp;#039;&amp;#039;&amp;#039; Spring Boot найчастіше використовують для швидкого створення REST API, мікросервісів, backend-модулів, інтеграційних сервісів і корпоративних застосунків.;&amp;lt;/div&amp;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;Spring Initializr&amp;#039;&amp;#039;&amp;#039; — це сервіс для швидкого створення Spring Boot-проєкту.; public interface OrderRepository extends JpaRepository&amp;lt;Order, Long&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
 this.orderService = orderService;&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;
* асинхронна обробка даних.; # У журналі зберігаються технічні інформаційні дані, помилки і результат обміну.; Під час використання Spring потрібно враховувати:&lt;br /&gt;
[[K2 Модуль Shopify]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Cloud&amp;#039;&amp;#039;&amp;#039; — це набір інструментів для мікросервісної та cloud-native архітектури.;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
@RestController&lt;br /&gt;
Такі інформаційні дані потрібно зберігати в захищених конфігураціях, secret-сховищах або змінних середовища.;[[ПРРО]]&lt;br /&gt;
&lt;br /&gt;
@Component&lt;br /&gt;
Він має змогу використовуватися для:&lt;br /&gt;
== Безпека Spring-застосунків ==&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;lt;/syntaxhighlight&amp;gt;Транзакції особливо важливі для:&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;
* корпоративних застосунків.; # Після підтвердження виконується deployment у production.; public OrderDto getOrder(@PathVariable Long id) {&lt;br /&gt;
&lt;br /&gt;
 controller/&lt;br /&gt;
&lt;br /&gt;
Spring MVC застосовується для:&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;
&lt;br /&gt;
== Spring Integration ==&lt;br /&gt;
&lt;br /&gt;
== Можливі помилки під час розробки ==&lt;br /&gt;
&lt;br /&gt;
[[Gradle]]&lt;br /&gt;
&lt;br /&gt;
 public OrderService(PaymentService paymentService) {&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Batch&amp;#039;&amp;#039;&amp;#039; — це фреймворк для batch-обробки великих обсягів даних.;&amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;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;
Spring Cloud має змогу використовуватися для:&lt;br /&gt;
Spring-проєкти зазвичай збираються через Maven або Gradle.; &amp;#039;&amp;#039;&amp;#039;Spring Framework&amp;#039;&amp;#039;&amp;#039; — це основа екосистеми Spring.; Вона надає можливість позначити метод як транзакційний, а Spring сам відкриє, підтвердить або відкотить транзакцію.; Він застосовується для асинхронних і неблокуючих web-застосунків.;== Spring Container ==&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.; username: k2_user&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dependency&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Container&amp;#039;&amp;#039;&amp;#039; відповідає за створення і керування beans.; Типові СУБД:&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-сценаріях.;== Spring Cloud ==&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;
* сервісом;&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-ом.; Найкраще Spring функціонує разом із Java, Gradle, TeamCity, Docker, PostgreSQL, YouTrack і DevOps-процесом.;&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;
&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;
* логування без секретів.; Воно сприяє створювати репозиторії, працювати з базами даних і зменшувати кількість шаблонного коду.; # Actuator і моніторинг перевіряють стан сервісу.;&amp;lt;/div&amp;gt;&lt;br /&gt;
 private final PaymentService paymentService;&lt;br /&gt;
== Тестування Spring-застосунків ==&lt;br /&gt;
== Spring і Kubernetes ==&lt;br /&gt;
&lt;br /&gt;
== Spring Actuator ==&lt;br /&gt;
Spring застосовується для розробки:&lt;br /&gt;
 com/example/app/&lt;br /&gt;
&lt;br /&gt;
Офіційна сторінка Spring Boot описує його як інструмент, який надає можливість без зайвих зусиль створювати stand-alone, production-grade Spring based applications, які можна без ускладнень запускати.; }&lt;br /&gt;
У Spring-проєкті не варто зберігати безпосередньо в коді:&lt;br /&gt;
&lt;br /&gt;
 url: jdbc:postgresql://localhost:5432/k2&lt;br /&gt;
&lt;br /&gt;
# Git commit.;== Spring WebFlux ==&lt;br /&gt;
&lt;br /&gt;
[[LiqPay]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ENTRYPOINT [&amp;quot;java&amp;quot;, &amp;quot;-jar&amp;quot;, &amp;quot;app.jar&amp;quot;]&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.; @Bean&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;
&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.; &amp;#039;&amp;#039;&amp;#039;Spring WebFlux&amp;#039;&amp;#039;&amp;#039; — це reactive web framework у Spring.; Він дає інструменти, але правильне розділення шарів, модель даних, безпека, транзакції, тести й DevOps залишаються відповідальністю команди.; Через нього можна вибрати мову, build-систему, версію Spring Boot, залежності та отримати готовий шаблон проєкту.; Замість того щоб кожен клас сам створював потрібні йому залежності, Spring керує об’єктами застосунку та передає залежності автономно.; entity/&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Безпека:&amp;#039;&amp;#039;&amp;#039; у Spring-застосунках не можна виводити в логи паролі, access tokens, private keys, повні реквізити платіжних карток, ключі електронного підпису або зайві персональні інформаційні дані.; Для більшості звичайних REST API достатньо Spring MVC, а WebFlux потрібен тоді, коли справді є собою потреба в reactive-моделі.; Spring створює bean, налаштовує його, передає залежності й контролює його життєвий цикл.; public class OrderService {&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 com/example/app/&lt;br /&gt;
&lt;br /&gt;
@Configuration&lt;br /&gt;
Типовий Dockerfile:&amp;lt;syntaxhighlight lang=&amp;quot;docker&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 implementation(&amp;quot;org.springframework.boot:spring-boot-starter-web&amp;quot;)&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 або іншими базами даних.; # Застосунок розгортається в test.; &amp;#039;&amp;#039;&amp;#039;Spring Security&amp;#039;&amp;#039;&amp;#039; — це проєкт для автентифікації, авторизації та захисту застосунків.;== Джерела ==&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.; Офіційна документація Spring Framework охоплює IoC Container, Events, Resources, Validation, Data Binding, AOP, Testing, Data Access, Spring MVC, WebSocket і WebFlux.; # Отримується відповідь.; Це робить код зрозумілішим і спрощує тестування.; # TeamCity запускає build.;== Spring MVC ==&lt;br /&gt;
[[Модуль Prom]]&lt;br /&gt;
&lt;br /&gt;
 @GetMapping(&amp;quot;/{id}&amp;quot;)&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.; Приклад Gradle-залежності:&amp;lt;syntaxhighlight lang=&amp;quot;kotlin&amp;quot;&amp;gt;&lt;br /&gt;
== Висновок ==&lt;br /&gt;
&lt;br /&gt;
До основних переваг Spring можна віднести:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;істотно:&amp;#039;&amp;#039;&amp;#039; Spring — це не одна бібліотека, а велика програмний пакет.; Spring Data має змогу використовуватися з:&lt;br /&gt;
Можна використовувати:&lt;br /&gt;
[[YouTrack]]&lt;br /&gt;
[[SaaS]]&lt;br /&gt;
public class OrderService {&lt;br /&gt;
 test/&lt;br /&gt;
У контексті &amp;#039;&amp;#039;&amp;#039;K2 ERP&amp;#039;&amp;#039;&amp;#039; Spring має змогу використовуватися для розробки backend-сервісів, API, інтеграційних модулів, batch-процесів, мікросервісів і допоміжних технічних компонентів.; Типові анотації:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Controller&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spring Boot&amp;#039;&amp;#039;&amp;#039; — це проєкт Spring, який спрощує створення самостійних production-ready застосунків.;[[ДПС]]&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;
* іншими сховищами даних.; Типова структура має змогу виглядати так:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
spring:&lt;br /&gt;
&lt;br /&gt;
== Див.; додатково ==&lt;br /&gt;
&amp;lt;/div&amp;gt;&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;
* ключі до хмарних сервісів.;== Типова структура Spring Boot-проєкту ==&lt;br /&gt;
 datasource:&lt;br /&gt;
== Beans ==&lt;br /&gt;
&lt;br /&gt;
COPY build/libs/app.jar app.jar&lt;br /&gt;
Spring Boot-сервіси можуть запускатися в Kubernetes.; * імпорту файлів;&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;
* інтеграційних задач.; testImplementation(&amp;quot;org.springframework.boot:spring-boot-starter-test&amp;quot;)&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Не плутати:&amp;#039;&amp;#039;&amp;#039; Spring MVC і Spring WebFlux — це різні web-підходи.; На практиці Spring часто застосовується разом зі Spring Boot.; Він сприяє розробнику не писати всю інфраструктуру вручну, а використовувати готові механізми для типових задач: створення об’єктів, підключення сервісів, робота з базами даних, транзакції, REST API, авторизація, конфігурація, тестування і взаємодія із зовнішніми системами.; @RequestMapping(&amp;quot;/api/orders&amp;quot;)&lt;br /&gt;
src/&lt;br /&gt;
 java/&lt;br /&gt;
server:&lt;br /&gt;
 main/&lt;br /&gt;
&lt;br /&gt;
@Transactional&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Для бізнес-систем:&amp;#039;&amp;#039;&amp;#039; Spring Security важливий для ERP, CRM і SaaS, де потрібно контролювати ролі користувачів, доступ до документів, API, фінансових даних і адміністративних функцій.; # Сервіс перетворює інформаційні дані у формат зовнішньої системи.; # Створюється Docker image.;[[SAF-T UA]]&lt;br /&gt;
== Загальний характеристика ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Рекомендація:&amp;#039;&amp;#039;&amp;#039; у Spring-проєктах бажано розділяти controller, service, repository, dto, entity, config та integration-шари.; # За потреби виконується підписання, валідація або формування XML.;[[Rider]]&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.; Spring має зручну модель керування транзакціями.; # Gradle виконує clean test build.; Приклад:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
[[IDE]]&lt;br /&gt;
 implementation(&amp;quot;org.springframework.boot:spring-boot-starter-data-jpa&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
== інформаційні дані, які не варто зберігати в коді ==&lt;br /&gt;
 port: 8080&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 public OrderController(OrderService orderService) {&lt;br /&gt;
[[K2 Модуль Magento]]&lt;br /&gt;
@Repository&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;Для K2 ERP:&amp;#039;&amp;#039;&amp;#039; Spring доцільно використовувати для backend-логіки, REST API, інтеграцій, batch-обробок і мікросервісів.; Він містить базові механізми для створення Java-застосунків.;== Spring Data ==&lt;br /&gt;
Для безпечної розробки на Spring потрібно контролювати:&lt;br /&gt;
Spring має змогу бути корисним для:&lt;br /&gt;
FROM eclipse-temurin:21-jre&lt;br /&gt;
@Service&lt;br /&gt;
&lt;br /&gt;
== Spring Batch ==&lt;br /&gt;
== Spring Initializr ==&lt;br /&gt;
&lt;br /&gt;
== Spring Framework ==&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.; До неї належать 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 ==&lt;br /&gt;
== Spring і Docker ==&lt;br /&gt;
&lt;br /&gt;
 return orderService.getOrder(id);&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.; # Image публікується в registry.; Actuator має змогу надавати:&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.;&amp;lt;/div&amp;gt;&lt;br /&gt;
 List&amp;lt;Order&amp;gt; findByCustomerId(Long customerId);&lt;br /&gt;
&lt;br /&gt;
[[Е-ТТН]]&lt;br /&gt;
Spring створений для спрощення розробки Java-застосунків.;&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;
 resources/&lt;br /&gt;
 }&lt;br /&gt;
 AppApplication.java&lt;br /&gt;
&lt;br /&gt;
== Spring і DevOps ==&lt;br /&gt;
Spring Boot-застосунки часто упаковуються в Docker-образи.;[[ЕДО]]&lt;br /&gt;
}&lt;br /&gt;
Spring Security має змогу забезпечувати:&lt;br /&gt;
Spring надає інфраструктуру для керування залежностями, конфігурацією, транзакціями, вебзапитами, доступом до баз даних, безпекою, тестуванням, інтеграціями та побудовою масштабованих Java-застосунків.; # Сервіс перевіряє вхідні інформаційні дані.; Spring — це одна з найпоширеніших екосистем для Java-розробки.; Він надає автоконфігурацію, starter-залежності, вбудовані web-сервери, Actuator, зручну структуру запуску і мінімум ручних налаштувань.; # Статус повертається в K2 ERP.; Bean має змогу бути:&lt;br /&gt;
 inventoryService.reserveItems(order);&lt;br /&gt;
У Kubernetes істотно налаштувати:&lt;br /&gt;
 }&lt;br /&gt;
Він виконує такі задачі:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Рекомендація:&amp;#039;&amp;#039;&amp;#039; паролі, токени, private keys і production connection strings не варто зберігати у відкритому application.yml.;== Dependency Injection ==&lt;br /&gt;
Spring добре вписується в DevOps-процес.; Типовий Spring-сервіс інтеграції має змогу працювати так:&lt;br /&gt;
&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;
&amp;lt;/div&amp;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.; Spring має розвинену підтримку тестування.; Spring Boot надає можливість оперативно створювати stand-alone, production-grade Spring-застосунки, які можна запускати як звичайний Java-застосунок.; application.yml&lt;br /&gt;
&lt;br /&gt;
# K2 ERP створює документ або подію.; paymentService.reservePayment(order);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Docker надає можливість запускати Spring-сервіси однаково в local, test, staging і production.; Він добре поєднується з Java, Gradle, TeamCity, Docker, PostgreSQL і DevOps-процесом.; Типовий pipeline:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Приклад Maven-залежності:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
== Maven і Gradle у 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;
* придатність для корпоративних систем.; # Сервіс надсилає запит до зовнішнього API.;&amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У production Actuator потрібно налаштовувати обережно, щоб не відкривати зайву технічну інформацію.; &amp;#039;&amp;#039;&amp;#039;Spring Integration&amp;#039;&amp;#039;&amp;#039; — це проєкт для побудови інтеграційних потоків між системами.; WORKDIR /app&lt;br /&gt;
public void createOrder(CreateOrderRequest request) {&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;
* інтеграцій із критичними даними.; dependencies {&lt;br /&gt;
 java/&lt;br /&gt;
&lt;br /&gt;
@Service&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 в окремих сценаріях.;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Order order = orderService.create(request);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Обмеження та ризики ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dependency Injection&amp;#039;&amp;#039;&amp;#039; — це підхід, коли залежності класу передаються зовні, а не створюються всередині самого класу.; * складність великої екосистеми;&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-ів.; Вона надає можливість створювати backend-сервіси, REST API, web-застосунки, мікросервіси, ERP-модулі, інтеграційні сервіси та корпоративні системи.; Він застосовують, коли потрібно для створення backend-сервісів забезпечується через &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;.;[[DevOps]]&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;
== Для чого застосовується Spring ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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.; Під час роботи зі Spring можуть виникати такі помилки:&lt;br /&gt;
== Spring Transactions ==&lt;br /&gt;
WebFlux має змогу бути корисним, коли платформа має багато одночасних I/O-операцій:&lt;br /&gt;
&lt;br /&gt;
== Spring Boot ==&lt;br /&gt;
Типові функціональні можливості Spring Boot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 this.paymentService = paymentService;&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;
== Основні функціональні можливості Spring ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Не плутати:&amp;#039;&amp;#039;&amp;#039; Spring не замінює архітектуру застосунку.;&amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;&lt;br /&gt;
 service/&lt;br /&gt;
&lt;br /&gt;
Приклад REST-контролера:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Зверніть увагу:&amp;#039;&amp;#039;&amp;#039; у розмовній мові «Spring» часто означає всю екосистему, а «Spring Boot» — конкретний інструмент для швидкого запуску Spring-застосунків із готовими налаштуваннями.; # Запускаються unit та integration tests.; Spring Framework можна використовувати без Spring Boot, але в сучасній розробці Spring Boot значно спрощує конфігурацію і запуск застосунків.; Типові залежності:&lt;br /&gt;
Приклад application.yml:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Spring підтримує роботу різні способи конфігурації:&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.;== Spring Security ==&lt;br /&gt;
Без Dependency Injection клас має змогу сам створювати залежності:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 repository/&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;
 config/&lt;br /&gt;
&lt;br /&gt;
public class OrderController {&lt;br /&gt;
== Spring у K2 ERP ==&lt;br /&gt;
Spring часто застосовується з реляційними базами даних.; Для цього потрібно використовувати змінні середовища або secret-сховища.; integration/&lt;br /&gt;
&lt;br /&gt;
 [[K2 Модуль Wix]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
</feed>