{"id":500050,"date":"2026-10-23T19:15:01","date_gmt":"2026-10-23T16:15:01","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=500050"},"modified":"2026-10-23T19:15:01","modified_gmt":"2026-10-23T16:15:01","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=500050","title":{"rendered":"\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0418\u0418 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e Spring Boot 2.7 \u2192 3.5?"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043f\u0440\u043e\u0434\u0435 \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f Spring Boot 2.7. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c \u0435\u0449\u0451 \u0432 \u043d\u043e\u044f\u0431\u0440\u0435 2023 \u0433\u043e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430\u00a0<a href=\"https:\/\/spring.io\/blog\/2023\/11\/23\/spring-boot-2-7-18-available-now\">\u0432\u044b\u0448\u0435\u043b 2.7.18, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u043a\u0438 2.x<\/a>. \u041d\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u043c\u043d\u043e\u0433\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0441\u0451 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u0438 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442. \u0418 \u043d\u0435\u0442, \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0432 \u043b\u0435\u043d\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u0435\u043d\u0443 \u043d\u043e\u043c\u0435\u0440\u0430 \u0432\u00a0<code>build.gradle<\/code>.<\/p>\n<p>\u041f\u0440\u0438\u0447\u0451\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0442\u0443\u0442 \u043f\u0443\u0433\u0430\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u0417\u0430\u043c\u0435\u043d\u0443\u00a0<code>javax.*<\/code>\u00a0\u043d\u0430\u00a0<code>jakarta.*<\/code>\u00a0\u0438\u043b\u0438 \u043f\u0440\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u00a0<code>WebSecurityConfigurerAdapter<\/code>\u00a0\u0432\u0438\u0434\u043d\u043e \u0441\u0440\u0430\u0437\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u0443\u043f\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435 \u0442\u043e, \u0447\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u0438\u0445\u0443\u044e. \u041a\u043e\u0434 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f, health-check \u0437\u0435\u043b\u0451\u043d\u044b\u0439, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c 404, 401 \u0438 500 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/p>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u044d\u0442\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043b\u044f \u0418\u0418-\u0430\u0433\u0435\u043d\u0442\u0430. \u0420\u0430\u0431\u043e\u0442\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043d\u0443\u0434\u043d\u0430\u044f \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u0433\u043e\u0442\u043e\u0432 \u043e\u0442\u0434\u0430\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0434\u0435. \u0418 \u044f \u044d\u0442\u0438 \u043e\u043f\u0430\u0441\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e. \u0410\u0433\u0435\u043d\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0437\u0435\u043b\u0451\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e\u0434 \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u0431\u043e\u0434\u0440\u043e \u043e\u0442\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e. \u0410 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437 \u0442\u0435\u0445, \u0447\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u0438 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u0434\u0435\u043b\u0435. \u042f \u0432\u0437\u044f\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 Spring Boot 2.7 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b Kodacode \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u043d\u0430 3.5. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0433\u043b\u0430\u0437 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u043c \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u0441\u0442\u0430\u043b \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0433\u0435\u043d\u0442\u0443 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e. \u0415\u0441\u043b\u0438 \u0430\u0433\u0435\u043d\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043e\u043d \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u044d\u0442\u0438 \u0442\u0435\u0441\u0442\u044b, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0432 \u043d\u0438\u0445 \u043d\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438.<\/p>\n<p>\u0412\u043e\u0442 \u043e \u0447\u0451\u043c \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c.<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0440\u0438\u0441\u043a \u0432 \u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043c\u0438\u0433\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0447\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 2.7 \u0438 3.x \u0438 \u0447\u0435\u0433\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a \u0430\u0433\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0451\u043b \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0438 \u043a\u0430\u043a \u0441\u0430\u043c \u0434\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p>\u0433\u0434\u0435 \u0430\u0433\u0435\u043d\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0430 \u0433\u0434\u0435 \u0431\u0435\u0437 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c;<\/p>\n<\/li>\n<li>\n<p>\u0447\u0435\u043a\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441<\/h3>\n<p>Billing Service \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043f\u043b\u0430\u0442\u0443 \u0441\u0447\u0435\u0442\u043e\u0432. \u041e\u043d \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0447\u0451\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0447\u0435\u0442\u043e\u0432 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0447\u0451\u0442, \u043e\u0442\u043c\u0435\u043d\u044f\u0442\u044c \u043e\u043f\u043b\u0430\u0442\u0443 \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a\u0443 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438\u0437 \u043f\u0438\u0441\u044c\u043c\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0443\u0442\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u043e\u0441\u0442\u0443\u043f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>POST<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\/api\/invoices<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Basic<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0447\u0451\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>GET<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\/api\/invoices<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Basic<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0447\u0435\u0442\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>GET<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\/api\/invoices\/{id}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Basic<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0447\u0451\u0442 \u043f\u043e id<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>POST<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\/api\/invoices\/{id}\/payments<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Basic<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u043f\u043b\u0430\u0442\u0443<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>GET<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\/api\/public\/pay\/{token}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u043f\u043b\u0430\u0442\u044b \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>GET<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\/actuator\/health<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">Health check<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0421\u0442\u0435\u043a \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. Java 11, Spring Boot 2.7.18, Spring Data JPA \u0441 Hibernate 5.6, Flyway \u0438 PostgreSQL. \u0421\u0435\u043a\u0443\u0440\u0438\u0442\u0438 \u0447\u0435\u0440\u0435\u0437\u00a0<code>WebSecurityConfigurerAdapter<\/code>\u00a0\u0438 HTTP Basic, \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Spring Cloud Sleuth.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/5f\/84\/f7\/5f84f7f6b4fa8055f3d238cf022e9b14.png\" alt=\"build.gradle.kts: Spring Boot 2.7.18 \u0438 Java 11\" width=\"3104\" height=\"1848\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/5f\/84\/f7\/5f84f7f6b4fa8055f3d238cf022e9b14.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/5f\/84\/f7\/5f84f7f6b4fa8055f3d238cf022e9b14.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>build.gradle.kts: Spring Boot 2.7.18 \u0438 Java 11<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/45\/20\/36\/4520367b0df623d097a63563a2ca59ea.png\" alt=\"\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430: JPA, Security, Sleuth, Flyway\" width=\"1962\" height=\"654\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/45\/20\/36\/4520367b0df623d097a63563a2ca59ea.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/45\/20\/36\/4520367b0df623d097a63563a2ca59ea.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430: JPA, Security, Sleuth, Flyway<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u043a\u043e\u0434 \u0442\u0443\u0442 \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0445.<\/p>\n<ul>\n<li>\n<p><strong>\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 3.x<\/strong>\u00a0\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0438 \u0441\u043e \u0441\u043b\u044d\u0448\u0435\u043c \u043d\u0430 \u043a\u043e\u043d\u0446\u0435, \u0442\u043e \u0435\u0441\u0442\u044c\u00a0<code>\/api\/invoices\/<\/code>;<\/p>\n<\/li>\n<li>\n<p><strong>API gateway<\/strong>\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 B3 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u00a0<code>X-Client-Context<\/code>\u00a0\u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0434\u043e 16 \u041a\u0411;<\/p>\n<\/li>\n<li>\n<p><strong>\u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a\u0438<\/strong>\u00a0\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u00a0<code>\/api\/public\/pay\/{token}<\/code>\u00a0\u0438\u0437 \u043f\u0438\u0441\u044c\u043c\u0430 \u0431\u0435\u0437 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u0430, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c 404, \u0430 \u043d\u0435 \u0444\u043e\u0440\u043c\u0443 \u0432\u0445\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u0447\u0435\u043a\u043b\u0438\u0441\u0442\u0430\u0445 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u043f\u0438\u0448\u0443\u0442, \u0430 \u0432 \u0436\u0438\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u043b\u043e\u0448\u044c \u0438 \u0440\u044f\u0434\u043e\u043c. \u041a\u043e\u0434 \u0434\u0435\u043c\u043e \u043b\u0435\u0436\u0438\u0442 \u0432\u00a0<a href=\"http:\/\/github.com\/befayer\/spring-boot-27-migration-demo\">github.com\/befayer\/spring-boot-27-migration-demo<\/a>.<\/p>\n<h3>\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u043e\u0432\u0435\u0440\u0438\u044f \u043d\u0430 \u0441\u043b\u043e\u0432\u043e<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0435\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e unit- \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043c\u0438\u0433\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c. \u0412 \u043d\u0438\u0445 \u0442\u043e\u0436\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043c\u0435\u043d\u044f\u0442\u044c\u00a0<code>javax<\/code>\u00a0\u043d\u0430\u00a0<code>jakarta<\/code>, \u0447\u0438\u043d\u0438\u0442\u044c\u00a0<code>@SpringBootTest<\/code>, MockMvc \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Security. \u0418 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0438 \u0437\u0435\u043b\u0451\u043d\u044b\u0435, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u0435\u0441\u0442\u044b \u0438 \u043a\u043e\u0434 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438\u0441\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0410 \u0432\u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c, \u043e\u043d\u0438 \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u044f \u0432\u044b\u043d\u043e\u0448\u0443 \u043d\u0430\u0440\u0443\u0436\u0443. \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0439 HTTP-\u043a\u043b\u0438\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e Spring \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.<\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437\u00a0<code>java.net.http.HttpClient<\/code>\u00a0\u0438\u0437 JDK;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u0441\u0442\u043e\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c JDBC;<\/p>\n<\/li>\n<li>\n<p>\u0442\u0435\u0441\u0442\u044b \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c source set\u00a0<code>src\/contractTest<\/code>\u00a0\u0438 \u0441\u0442\u0443\u0447\u0430\u0442\u0441\u044f \u0432 \u0443\u0436\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u00a0<code>TARGET_BASE_URL<\/code>.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/e9\/a0\/00\/e9a0001b60675a4e55849702c2271056.png\" alt=\"\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043b\u0435\u0436\u0430\u0442 \u0440\u044f\u0434\u043e\u043c \u0441 main \u0438 test, \u043d\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c source set\" width=\"3104\" height=\"1848\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/e9\/a0\/00\/e9a0001b60675a4e55849702c2271056.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/e9\/a0\/00\/e9a0001b60675a4e55849702c2271056.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043b\u0435\u0436\u0430\u0442 \u0440\u044f\u0434\u043e\u043c \u0441 main \u0438 test, \u043d\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c source set<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u043e, \u043d\u0430 \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0433\u043e \u0436\u0434\u0451\u0442 \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a \u0441 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439.<\/p>\n<pre><code class=\"java\">@Test@DisplayName(\"\u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 \u2014 404, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f\")void expiredPaymentLinkIsNotFound() throws Exception {    HttpResponse&lt;String&gt; response = api.send(api.request(\"\/api\/public\/pay\/expired-token\").GET());    assertEquals(404, response.statusCode(), response.body());    assertEquals(404, json(response).path(\"status\").asInt());    assertEquals(\"\/api\/public\/pay\/expired-token\", json(response).path(\"path\").asText());}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432 12. \u041e\u043d\u0438 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0441\u043e \u0441\u0447\u0435\u0442\u0430\u043c\u0438, \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 gateway. \u0421\u043a\u0440\u0438\u043f\u0442\u00a0<code>scripts\/contract-check.sh<\/code>\u00a0\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 PostgreSQL \u0438 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0442\u043a\u0438, \u0433\u043e\u043d\u044f\u0435\u0442 \u0442\u0435\u0441\u0442\u044b \u0438 \u0433\u0430\u0441\u0438\u0442 \u0441\u0435\u0440\u0432\u0438\u0441. \u0422\u0430\u043a \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043d\u0430\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u043d\u0430 2.7, \u0438 \u043d\u0430 3.5. \u0423\u0441\u043f\u0435\u0445.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443 \u043f\u043e\u0434\u0433\u043e\u043d\u044f\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u043f\u043e\u0434 \u043d\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u044f \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442, \u0430 \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0432\u00a0<code>AGENTS.md<\/code>. \u0410\u0433\u0435\u043d\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/2e\/6c\/8e\/2e6c8ea8ec68c9043c70601fd17057d8.png\" alt=\"AGENTS.md: \u0442\u0435\u0441\u0442\u044b \u0432 src\/contractTest \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u0440\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0435 \u2014 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c\" width=\"3104\" height=\"1848\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/2e\/6c\/8e\/2e6c8ea8ec68c9043c70601fd17057d8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/2e\/6c\/8e\/2e6c8ea8ec68c9043c70601fd17057d8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>AGENTS.md: \u0442\u0435\u0441\u0442\u044b \u0432 src\/contractTest \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u0440\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0435 \u2014 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0435\u0440\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0<code>git diff boot-2.7 -- src\/contractTest<\/code>\u00a0\u043f\u0443\u0441\u0442\u043e\u0439.<\/p>\n<p>\u0410 \u043b\u043e\u0432\u044f\u0442 \u043b\u0438 \u044d\u0442\u0438 \u0442\u0435\u0441\u0442\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c? \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441 \u0430\u0433\u0435\u043d\u0442\u0443, \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u044d\u0442\u043e \u0441\u0430\u043c \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u00ab\u043d\u0430\u0438\u0432\u043d\u0443\u044e\u00bb \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e. \u041f\u043e\u043f\u0440\u0430\u0432\u0438\u043b \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u043d\u0430 \u0447\u0442\u043e \u0440\u0443\u0433\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e. \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b, health-check \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u00a0<code>UP<\/code>, \u0430 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0443\u043f\u0430\u043b\u0438 \u0432 7 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0437 12. \u0411\u044b\u043b\u043e 500 \u043f\u0440\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0447\u0451\u0442\u0430, 404 \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435, 401 \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 400 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043e\u0442 gateway. \u041d\u0430\u0438\u0432\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u044f \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u043a\u0438\u043d\u0443\u043b, \u0438 \u0430\u0433\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 2.7.<\/p>\n<h3>\u0427\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 2.7 \u0438 3.x<\/h3>\n<p>Spring Boot 3.0 \u0441\u0442\u0430\u043b \u0441\u0430\u043c\u044b\u043c \u043a\u0440\u0443\u043f\u043d\u044b\u043c \u0440\u0435\u043b\u0438\u0437\u043e\u043c \u0441\u043e \u0432\u0440\u0435\u043c\u0451\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041d\u0438\u0436\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0435\u043d\u0443\u0442 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441. \u0421\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041e\u0431\u043b\u0430\u0441\u0442\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0438\u0434\u043d\u043e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435?<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Java<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u2014 17<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Jakarta EE<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>javax.*<\/code>\u00a0\u2192\u00a0<code>jakarta.*<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Spring Security 6<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0434\u0430\u043b\u0451\u043d\u00a0<code>WebSecurityConfigurerAdapter<\/code>,\u00a0<code>antMatchers<\/code>\u00a0\u2192\u00a0<code>requestMatchers<\/code>, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0432\u0441\u0435 \u0442\u0438\u043f\u044b dispatch, \u0432\u043a\u043b\u044e\u0447\u0430\u044f ERROR<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Spring MVC 6<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043b\u044d\u0448 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043f\u0443\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c \u0431\u0435\u0437 \u043d\u0435\u0433\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u043d\u0435\u0442<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Hibernate 6<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 sequence \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0442\u0438\u043f\u0430\u0445 \u0438 HQL<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u043d\u0435\u0442<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0447\u0430\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0430 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0430; \u0441\u0442\u0430\u0440\u044b\u0435 \u043c\u043e\u043b\u0447\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u043d\u0435\u0442<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0441\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">Spring Cloud Sleuth \u2192 Micrometer Tracing<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Flyway 10+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 PostgreSQL \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u00a0<a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.0-Migration-Guide\">Spring Boot 3.0 Migration Guide<\/a>.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 3.5, \u0430 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 4.x? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 2.7 \u2192 3.x \u0441\u0430\u043c\u044b\u0439 \u0442\u044f\u0436\u0451\u043b\u044b\u0439. Jakarta, Security 6 \u0438 Hibernate 6 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0440\u0430\u0437 \u0437\u0434\u0435\u0441\u044c. \u0412\u0435\u0442\u043a\u0430 3.x \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 3.5, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430. \u0427\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0438 \u0443 3.5\u00a0<a href=\"https:\/\/spring.io\/projects\/spring-boot#support\">\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430<\/a>\u00a0\u0443\u0436\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0432 \u0438\u044e\u043d\u0435 2026 \u0433\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0439 \u043d\u0430\u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u041f\u0440\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 3.5 \u2192 4 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<h3>\u041e\u0442\u0434\u0430\u044e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0430\u0433\u0435\u043d\u0442\u0443<\/h3>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u043b \u044f \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 Kodacode \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 Koda Pro \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439. \u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u0440\u044b\u043b \u043d\u0430 \u0432\u0435\u0442\u043a\u0435\u00a0<code>migration\/boot-3.5<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u043b \u043e\u0442 \u0442\u0435\u0433\u0430\u00a0<code>boot-2.7<\/code>, \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u00ab\u0411\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439\u00bb, \u0433\u0434\u0435 \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c \u0447\u0438\u0442\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043f\u0440\u0430\u0432\u0438\u0442 \u043a\u043e\u0434.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/73\/a7\/fa\/73a7fa34fddcabac3e32a181e1429248.png\" alt=\"\u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 \u0432 Kodacode, \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c koda-pro\" width=\"2880\" height=\"1624\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/73\/a7\/fa\/73a7fa34fddcabac3e32a181e1429248.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/73\/a7\/fa\/73a7fa34fddcabac3e32a181e1429248.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 \u0432 Kodacode, \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c koda-pro<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u044f \u0437\u0430\u0434\u0430\u043b \u0430\u0433\u0435\u043d\u0442\u0443 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u043f\u043e\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c.<\/p>\n<blockquote>\n<p>\u0427\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u0447\u0442\u043e \u0432 \u043d\u0451\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 Spring Boot 3.5? \u041f\u043e\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0439.<\/p>\n<\/blockquote>\n<p>\u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0430\u0433\u0435\u043d\u0442 \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u043a\u043e\u0434\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. \u0414\u0443\u043c\u0430\u043b \u043e\u043d \u043f\u043e\u0447\u0442\u0438 \u0432\u043e\u0441\u0435\u043c\u044c \u043c\u0438\u043d\u0443\u0442. \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0434\u0432\u0430\u0436\u0434\u044b \u0441\u0445\u043e\u0434\u0438\u043b \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/96\/cc\/12\/96cc1291635a6acdc7ce835d10c51b16.png\" alt=\"\u041e\u0442\u0432\u0435\u0442 \u0430\u0433\u0435\u043d\u0442\u0430: \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u043d\u044b \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438\" width=\"717\" height=\"404\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/96\/cc\/12\/96cc1291635a6acdc7ce835d10c51b16.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/96\/cc\/12\/96cc1291635a6acdc7ce835d10c51b16.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0442\u0432\u0435\u0442 \u0430\u0433\u0435\u043d\u0442\u0430: \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u043d\u044b \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0438\u0441\u043a\u0438 \u043e\u043d \u043f\u043e\u0434\u0435\u043b\u0438\u043b \u043d\u0430 \u0434\u0432\u0435 \u043a\u0443\u0447\u043a\u0438. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043f\u0430\u043b\u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u0434\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f, \u0432\u0440\u043e\u0434\u0435\u00a0<code>javax<\/code>\u00a0\u2192\u00a0<code>jakarta<\/code>, \u043f\u0440\u043e\u043f\u0430\u0432\u0448\u0435\u0433\u043e\u00a0<code>WebSecurityConfigurerAdapter<\/code>\u00a0\u0438 Sleuth. \u0412\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043d\u0430\u0437\u0432\u0430\u043b \u00ab\u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043b\u043e\u0432\u0443\u0448\u043a\u0438 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0432\u0430\u043b\u044f\u0442 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u00bb, \u043f\u0440\u0438\u0447\u0451\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0430\u0434\u0451\u0442.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/53\/6b\/1e\/536b1e4ce2214955cad177c641fe6aa2.png\" alt=\"\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043b\u043e\u0432\u0443\u0448\u0435\u043a: \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0438 \u0442\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0430\u0434\u0451\u0442\" width=\"2880\" height=\"1624\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/53\/6b\/1e\/536b1e4ce2214955cad177c641fe6aa2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/53\/6b\/1e\/536b1e4ce2214955cad177c641fe6aa2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043b\u043e\u0432\u0443\u0448\u0435\u043a: \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0438 \u0442\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0430\u0434\u0451\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u0418 \u043f\u043e\u043f\u0430\u043b \u0432 \u0442\u043e\u0447\u043a\u0443, \u043d\u0430\u0437\u0432\u0430\u0432 \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043b\u043e\u0432\u0443\u0448\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0437\u0430\u043b\u043e\u0436\u0438\u043b \u0432 \u0441\u0435\u0440\u0432\u0438\u0441.<\/p>\n<ul>\n<li>\n<p>Hibernate 6 \u0438\u0449\u0435\u0442\u00a0<code>invoices_seq<\/code>\u00a0\u0432\u043c\u0435\u0441\u0442\u043e\u00a0<code>hibernate_sequence<\/code>\u00a0\u2192 \u043b\u044e\u0431\u043e\u0439\u00a0<code>POST \/api\/invoices<\/code>\u0434\u0430\u0441\u0442 500;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043b\u044d\u0448 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043f\u0443\u0442\u0438 \u2192\u00a0<code>\/api\/invoices\/<\/code>\u00a0\u0434\u0430\u0441\u0442 404;<\/p>\n<\/li>\n<li>\n<p>Security 6 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u043a\u00a0<code>\/error<\/code>\u00a0\u2192 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 \u0434\u0430\u0441\u0442 401 \u0432\u043c\u0435\u0441\u0442\u043e 404;<\/p>\n<\/li>\n<li>\n<p><code>server.max-http-header-size<\/code>\u00a0\u043c\u043e\u043b\u0447\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u2192 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 16 \u041a\u0411 \u0434\u0430\u0441\u0442 400.<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u0435\u0437 \u043f\u0440\u043e\u043c\u0430\u0445\u0430 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c. \u0410\u0433\u0435\u043d\u0442 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f B3-\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430. \u041d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/69\/9f\/06\/699f065bd7ed3edbf60cc5b807116bc1.png\" alt=\"\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0444\u0438\u043a\u0441\u0430 \u0434\u043b\u044f sequence \u0438 \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e\" width=\"2880\" height=\"1624\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/69\/9f\/06\/699f065bd7ed3edbf60cc5b807116bc1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/69\/9f\/06\/699f065bd7ed3edbf60cc5b807116bc1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0444\u0438\u043a\u0441\u0430 \u0434\u043b\u044f sequence \u0438 \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u0435\u0449\u0451 \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0417\u043d\u0430\u0442\u044c \u043f\u0440\u043e \u043b\u043e\u0432\u0443\u0448\u043a\u0443 \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0435\u0451 \u0432 \u0436\u0438\u0432\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u043c\u043e\u0442\u0440\u044e, \u0434\u043e\u0442\u044f\u043d\u0435\u0442 \u043b\u0438 \u0430\u0433\u0435\u043d\u0442 \u0434\u043e \u0437\u0435\u043b\u0451\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c. \u0412\u0441\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0430 \u043d\u0435 \u0432 \u043d\u0451\u043c. \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u00a0<code>AGENTS.md<\/code>, \u043e\u0431\u044a\u0451\u043c \u0438 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u0432\u00a0<code>docs\/MIGRATION.md<\/code>. \u041f\u0440\u043e\u043c\u043f\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<pre><code class=\"markdown\">\u041f\u0435\u0440\u0435\u0432\u0435\u0434\u0438 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u043e Spring Boot 2.7 \u043d\u0430 Spring Boot 3.5.\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439 `AGENTS.md` \u0438 `docs\/MIGRATION.md`, \u0437\u0430\u0442\u0435\u043c \u0438\u0437\u0443\u0447\u0438 \u043a\u043e\u0434 \u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435\u0442\u0435\u0441\u0442\u044b \u0432 `src\/contractTest`.\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u044b:1. \u0417\u0430\u043f\u0443\u0441\u0442\u0438 `scripts\/contract-check.sh` \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.2. \u0421\u043e\u0441\u0442\u0430\u0432\u044c \u043f\u043b\u0430\u043d \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438 \u0440\u0438\u0441\u043a\u0438.3. \u0412\u044b\u043f\u043e\u043b\u043d\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e.4. \u0417\u0430\u043f\u0443\u0441\u0442\u0438 `.\/gw build` \u0438 `scripts\/contract-check.sh`.5. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0430\u0434\u0430\u044e\u0442, \u043d\u0430\u0439\u0434\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u044c \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.   \u0422\u0435\u0441\u0442\u044b \u0438 \u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u0435 \u043c\u0435\u043d\u044f\u0439.6. \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0439, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u0438\u0437 `docs\/MIGRATION.md` \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b.\u0412 \u043a\u043e\u043d\u0446\u0435 \u0434\u0430\u0439 \u043e\u0442\u0447\u0451\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0438\u0437 `docs\/MIGRATION.md`.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f4\/4a\/3a\/f44a3a927a7015d5c28e5e4b7859382f.png\" alt=\"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0447\u0430\u0442\" width=\"2880\" height=\"1624\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f4\/4a\/3a\/f44a3a927a7015d5c28e5e4b7859382f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f4\/4a\/3a\/f44a3a927a7015d5c28e5e4b7859382f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0447\u0430\u0442<\/figcaption><\/div>\n<\/figure>\n<h4>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u0438 \u043f\u043b\u0430\u043d<\/h4>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0430\u0433\u0435\u043d\u0442 \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0443\u043d\u043a\u0442\u0435, \u0438 \u043f\u0440\u043e\u0433\u043d\u0430\u043b \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043d\u0435\u0442\u0440\u043e\u043d\u0443\u0442\u043e\u0439 2.7. \u0418 \u0442\u0443\u0442 \u0436\u0435 \u0443\u043f\u0451\u0440\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. Docker \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0430\u0433\u0435\u043d\u0442\u0430 \u043d\u0435 \u043d\u0430\u0448\u0451\u043b\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441\u0442\u043e\u0438\u0442 Rancher Desktop, \u0438 \u0435\u0433\u043e\u00a0<code>docker<\/code>\u00a0\u043d\u0435 \u043f\u043e\u043f\u0430\u043b \u0432 PATH. \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043d \u043d\u0435 \u0441\u0442\u0430\u043b, \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0448\u0451\u043b PostgreSQL 16, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 Homebrew, \u0437\u0430\u0432\u0451\u043b \u0432 \u043d\u0451\u043c \u0440\u043e\u043b\u044c \u0438 \u0431\u0430\u0437\u0443\u00a0<code>billing<\/code>\u00a0(\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 PostgreSQL), \u0430 \u0435\u0449\u0451 \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443\u00a0<code>docker<\/code>\u00a0\u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/32\/5f\/ff\/325fff0836daf422b7f15369465e304d.png\" alt=\"Docker \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d: \u0430\u0433\u0435\u043d\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 PostgreSQL \u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\" width=\"2880\" height=\"1624\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/32\/5f\/ff\/325fff0836daf422b7f15369465e304d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/32\/5f\/ff\/325fff0836daf422b7f15369465e304d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Docker \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d: \u0430\u0433\u0435\u043d\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 PostgreSQL \u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 2.7 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c 12 \u0438\u0437 12. \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u043d \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b \u043f\u043b\u0430\u043d \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u0448\u0430\u0433\u043e\u0432 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0435\u0433\u043e \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u043e\u043c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/64\/31\/b3\/6431b356529572be79ef71914c08ce86.png\" alt=\"\u041f\u043b\u0430\u043d \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438: \u0448\u0435\u0441\u0442\u044c \u0448\u0430\u0433\u043e\u0432, \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u2014 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\" width=\"717\" height=\"404\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/64\/31\/b3\/6431b356529572be79ef71914c08ce86.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/64\/31\/b3\/6431b356529572be79ef71914c08ce86.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043b\u0430\u043d \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438: \u0448\u0435\u0441\u0442\u044c \u0448\u0430\u0433\u043e\u0432, \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u2014 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u0448\u0430\u0433 \u00ab\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c: trailing slash, B3, \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, ERROR-dispatch, sequence Hibernate 6\u00bb. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0441\u044f. \u0410\u0433\u0435\u043d\u0442 \u0441\u0434\u0435\u043b\u0430\u043b \u0438\u0437 \u043d\u0435\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043f\u043b\u0430\u043d\u0430 \u0435\u0449\u0451 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0432\u0438\u0434\u0435\u043b \u0445\u043e\u0442\u044c \u043e\u0434\u0438\u043d \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0442\u0435\u0441\u0442.<\/p>\n<h4>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u043a\u043e\u0434<\/h4>\n<p>\u041c\u0438\u043d\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0441\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 \u0430\u0433\u0435\u043d\u0442 \u0434\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0434\u043e\u00a0<code>build.gradle.kts<\/code>. \u0411\u044b\u043b\u043e \u0442\u0430\u043a.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/3b\/95\/d8\/3b95d847104f4eea4b142da564b16945.png\" alt=\"\u0414\u043e: Spring Boot 2.7.18, dependency-management 1.0.15, Java 11\" width=\"3104\" height=\"1848\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/3b\/95\/d8\/3b95d847104f4eea4b142da564b16945.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/3b\/95\/d8\/3b95d847104f4eea4b142da564b16945.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u043e: Spring Boot 2.7.18, dependency-management 1.0.15, Java 11<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0441\u0442\u0430\u043b\u043e \u0442\u0430\u043a.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/ec\/fa\/9b\/ecfa9b8a702b5ba72222342ade9b109b.png\" alt=\"\u041f\u043e\u0441\u043b\u0435: Spring Boot 3.5.16, dependency-management 1.1.7, Java 21\" width=\"3104\" height=\"1848\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/ec\/fa\/9b\/ecfa9b8a702b5ba72222342ade9b109b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/ec\/fa\/9b\/ecfa9b8a702b5ba72222342ade9b109b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u043b\u0435: Spring Boot 3.5.16, dependency-management 1.1.7, Java 21<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u043d \u0432\u044b\u043a\u0438\u043d\u0443\u043b BOM Spring Cloud 2021.0.9, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 Sleuth \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u0437 Spring Cloud \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041c\u0435\u0441\u0442\u043e Sleuth \u0437\u0430\u043d\u044f\u043b Micrometer Tracing \u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c Brave, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0434\u0430\u00a0<a href=\"https:\/\/github.com\/micrometer-metrics\/tracing\/wiki\/Spring-Cloud-Sleuth-3.1-Migration-Guide\">\u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u043e \u044f\u0434\u0440\u043e Sleuth<\/a>, \u0430 \u0435\u0449\u0451 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044c\u00a0<code>flyway-database-postgresql<\/code>, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e Flyway 10+ PostgreSQL \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u0437\u043d\u0430\u0451\u0442. \u042d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u00a0<a href=\"https:\/\/docs.spring.io\/spring-boot\/3.5\/how-to\/data-initialization.html#howto.data-initialization.migration-tool.flyway\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Spring Boot 3.5<\/a>. \u0412\u0441\u0451 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u0430\u0433\u0435\u043d\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/aa\/70\/2c\/aa702ce2c459db644b629330cc64140a.png\" alt=\"\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438: Micrometer Tracing \u0432\u043c\u0435\u0441\u0442\u043e Sleuth \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c Flyway\" width=\"3104\" height=\"1848\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/aa\/70\/2c\/aa702ce2c459db644b629330cc64140a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/aa\/70\/2c\/aa702ce2c459db644b629330cc64140a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438: Micrometer Tracing \u0432\u043c\u0435\u0441\u0442\u043e Sleuth \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c Flyway<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0442\u043e\u043c \u043f\u043e\u0448\u043b\u0430 \u0440\u0443\u0442\u0438\u043d\u0430.\u00a0<code>javax.*<\/code>\u00a0\u2192\u00a0<code>jakarta.*<\/code>\u00a0\u0432 \u043f\u044f\u0442\u0438 \u0444\u0430\u0439\u043b\u0430\u0445,\u00a0<code>SecurityFilterChain<\/code>\u00a0\u0432\u043c\u0435\u0441\u0442\u043e\u00a0<code>WebSecurityConfigurerAdapter<\/code>, \u043d\u043e\u0432\u044b\u0439\u00a0<code>Tracer<\/code>\u00a0\u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0434\u0430\u0451\u0442 trace id. \u0417\u0430\u043e\u0434\u043d\u043e \u043e\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0447\u0435\u0442\u044b\u0440\u0435 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043b\u043e\u0432\u0443\u0448\u0435\u043a. \u041a \u043d\u0438\u043c \u044f \u0432\u0435\u0440\u043d\u0443\u0441\u044c \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0439\u0434\u0443 \u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<h3>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0430 3.5 \u0437\u0435\u043b\u0451\u043d\u044b\u0439, \u0438 \u044d\u0442\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e<\/h3>\n<p>\u0427\u0435\u0440\u0435\u0437 14 \u043c\u0438\u043d\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 Kodacode \u0441\u043e\u0431\u0440\u0430\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 Spring Boot 3.5.16.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/49\/95\/34\/49953407bce894246cd1db047c853d84.png\" alt=\"\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0430 3.5: \u0432\u0441\u0435 12 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0437\u0435\u043b\u0451\u043d\u044b\u0435\" width=\"2880\" height=\"1624\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/49\/95\/34\/49953407bce894246cd1db047c853d84.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/49\/95\/34\/49953407bce894246cd1db047c853d84.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0430 3.5: \u0432\u0441\u0435 12 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0437\u0435\u043b\u0451\u043d\u044b\u0435<\/figcaption><\/div>\n<\/figure>\n<p>12 \u0438\u0437 12 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0430. \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u0432\u0441\u0451, \u043f\u0438\u0448\u0438 \u043e\u0442\u0447\u0451\u0442. \u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043c\u0430\u043b\u043e \u043e \u0447\u0451\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442. \u041c\u043e\u0436\u0435\u0442, \u0432\u0441\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0430\u0432\u0434\u0430 \u043d\u0443\u0436\u043d\u044b. \u0410 \u043c\u043e\u0436\u0435\u0442, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043b\u0438\u0448\u043d\u044f\u044f, \u0430 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u044f \u0434\u0443\u043c\u0430\u044e.<\/p>\n<p>\u0410\u0433\u0435\u043d\u0442, \u043f\u043e\u0445\u043e\u0436\u0435, \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u043e \u0442\u043e\u043c \u0436\u0435 \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.<\/p>\n<blockquote>\n<p>\u0412\u0441\u0451 \u0437\u0435\u043b\u0451\u043d\u043e\u0435 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0430. \u0427\u0442\u043e\u0431\u044b \u043e\u0442\u0447\u0451\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u043f\u0440\u043e\u0432\u0435\u0440\u044e \u043a\u0430\u0436\u0434\u0443\u044e \u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u044f \u0435\u0451 \u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442.<\/p>\n<\/blockquote>\n<p>\u042f \u0435\u0433\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u043b. \u0412 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u0431\u044b\u043b\u043e \u00ab\u0435\u0441\u043b\u0438 \u0442\u0435\u0441\u0442\u044b \u043f\u0430\u0434\u0430\u044e\u0442, \u043d\u0430\u0439\u0434\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443\u00bb. \u0422\u0435\u0441\u0442\u044b \u043d\u0435 \u0443\u043f\u0430\u043b\u0438, \u0438 \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442.<\/p>\n<h3>\u0410\u0433\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u0437\u0430\u0449\u0438\u0442\u0443<\/h3>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u043d \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043d\u0438\u043c\u0430\u043b \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u0435, \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u043b \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b, \u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0443\u043f\u0430\u043b \u0438 \u043a\u0430\u043a, \u0438 \u0441\u0442\u0430\u0432\u0438\u043b \u0437\u0430\u0449\u0438\u0442\u0443 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e. \u0412 \u043e\u0442\u0447\u0451\u0442\u0435 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/6d\/89\/b4\/6d89b40b1c06cc7373fa91ffb59762d5.png\" alt=\"\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0430\u0431\u043b\u044f\u0446\u0438\u0439 \u0438\u0437 \u043e\u0442\u0447\u0451\u0442\u0430 \u0430\u0433\u0435\u043d\u0442\u0430: \u043a\u0430\u043a\u0443\u044e \u0437\u0430\u0449\u0438\u0442\u0443 \u0443\u0431\u0440\u0430\u043b\u0438, \u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0443\u043f\u0430\u043b \u0438 \u043f\u043e\u0447\u0435\u043c\u0443\" width=\"2880\" height=\"1624\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/6d\/89\/b4\/6d89b40b1c06cc7373fa91ffb59762d5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/6d\/89\/b4\/6d89b40b1c06cc7373fa91ffb59762d5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0430\u0431\u043b\u044f\u0446\u0438\u0439 \u0438\u0437 \u043e\u0442\u0447\u0451\u0442\u0430 \u0430\u0433\u0435\u043d\u0442\u0430: \u043a\u0430\u043a\u0443\u044e \u0437\u0430\u0449\u0438\u0442\u0443 \u0443\u0431\u0440\u0430\u043b\u0438, \u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0443\u043f\u0430\u043b \u0438 \u043f\u043e\u0447\u0435\u043c\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u0438 \u043a\u0430\u043a \u0430\u0433\u0435\u043d\u0442 \u044d\u0442\u043e \u043f\u043e\u0447\u0438\u043d\u0438\u043b.<\/p>\n<h4>Hibernate 6 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c ID<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u044f\u0432\u043d\u044b\u0439\u00a0<code>@SequenceGenerator<\/code>\u00a0\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0433\u043e\u043b\u044b\u0439\u00a0<code>@GeneratedValue<\/code>, \u043f\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0442\u0435\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0447\u0451\u0442. \u041e\u043d\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 500, \u0430 \u0432 \u043b\u043e\u0433\u0435\u00a0<code>relation \"invoices_seq\" does not exist<\/code>.<\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0442\u0443\u0442 \u0431\u0435\u0441\u0441\u0438\u043b\u0435\u043d, \u0432\u0435\u0434\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u00a0<code>@GeneratedValue<\/code>\u00a0\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0440\u043e\u0432\u043d\u043e \u0442\u043e\u0439 \u0436\u0435. \u041f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e Hibernate. \u0414\u043b\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438\u00a0<code>AUTO<\/code>\u00a0Hibernate 5 \u0431\u0440\u0430\u043b \u043e\u0431\u0449\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u00a0<code>hibernate_sequence<\/code>, \u0430 Hibernate 6, \u043a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0435\u0433\u043e\u00a0<a href=\"https:\/\/github.com\/hibernate\/hibernate-orm\/blob\/6.0\/migration-guide.adoc#implicit-identifier-sequence-and-table-name\">\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438<\/a>, \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u00a0<code>&lt;\u0438\u043c\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438&gt;_seq<\/code>\u00a0\u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u0440\u0438\u0447\u0451\u043c\u00a0<a href=\"https:\/\/github.com\/hibernate\/hibernate-orm\/blob\/6.0\/migration-guide.adoc#defaults-for-implicit-sequence-generators\">\u0441 \u0448\u0430\u0433\u043e\u043c 50<\/a>, \u043a\u0430\u043a \u0443\u00a0<code>@SequenceGenerator<\/code>\u00a0\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0421\u0445\u0435\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 Flyway, \u0438 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e\u00a0<code>hibernate_sequence<\/code>. \u041f\u0440\u0438\u00a0<code>ddl-auto: none<\/code>\u00a0\u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0438 \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u0422\u043e\u0442 \u0436\u0435 \u0433\u0430\u0439\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443\u00a0<code>hibernate.id.db_structure_naming_strategy=legacy<\/code>. \u0410\u0433\u0435\u043d\u0442 \u0432\u044b\u0431\u0440\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u0435\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u041e\u043d \u043d\u0435 \u0441\u0442\u0430\u043b \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0448\u0430\u0433 1.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/17\/92\/40\/1792403bb96ea73017557df365c098a4.png\" alt=\"\u042f\u0432\u043d\u044b\u0439 @SequenceGenerator \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e hibernate_sequence\" width=\"2800\" height=\"1544\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/17\/92\/40\/1792403bb96ea73017557df365c098a4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/17\/92\/40\/1792403bb96ea73017557df365c098a4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u042f\u0432\u043d\u044b\u0439 @SequenceGenerator \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e hibernate_sequence<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0442\u043e\u043c \u043e\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u00ab\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0431\u0430\u0437\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\u00bb. \u0412\u0441\u0442\u0430\u0432\u0438\u043b \u0432 \u0431\u0430\u0437\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u00ab\u043a\u0430\u043a \u0438\u0437 2.7\u00bb \u0441\u00a0<code>id=900<\/code>\u00a0\u0438 \u0443\u0431\u0435\u0434\u0438\u043b\u0441\u044f, \u0447\u0442\u043e \u0441\u0447\u0451\u0442 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0<code>INV-000900<\/code>, \u0430 \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u00a0<code>id=901<\/code>. \u0417\u043d\u0430\u0447\u0438\u0442, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f, \u0430 \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0443\u043b\u044f.<\/p>\n<h4>\u0421\u043b\u044d\u0448 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043f\u0443\u0442\u0438<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u044f\u0432\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0441\u043e \u0441\u043b\u044d\u0448\u0435\u043c,\u00a0<code>GET \/api\/invoices\/<\/code>\u00a0\u043e\u0442 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 405 Method Not Allowed.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 Spring MVC 6\u00a0<a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.0-Migration-Guide#spring-mvc-and-webflux-url-matching-changes\">\u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u043b\u044d\u0448\u0435\u043c \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/a>, \u0430 \u0441\u0430\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0439. \u0412 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0433\u0430\u0439\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 404, \u0438 \u043f\u0440\u0438 \u043c\u043e\u0435\u0439 \u043d\u0430\u0438\u0432\u043d\u043e\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u0430\u043b 404, \u0430 \u043f\u0440\u0438 \u043e\u0442\u043a\u0430\u0442\u0435 \u0443 \u0430\u0433\u0435\u043d\u0442\u0430 405. \u0412\u0441\u0451 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u00a0<code>POST<\/code>\u00a0\u0443 \u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u0432\u0438\u0441\u0435\u043b \u0438 \u043d\u0430\u00a0<code>\"\/\"<\/code>. Spring \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442, \u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0434\u043d\u0430, \u0430 \u043a\u043e\u0434\u044b \u043e\u0442\u0432\u0435\u0442\u0430 \u0440\u0430\u0437\u043d\u044b\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043d\u0435 200\u00bb.<\/p>\n<p>\u0410\u0433\u0435\u043d\u0442 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b \u043f\u0443\u0442\u0438 \u0441\u043e \u0441\u043b\u044d\u0448\u0435\u043c \u044f\u0432\u043d\u043e, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0430 \u0432\u0441\u0435\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u0435\u0441\u0442. \u0422\u0430\u043a \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 2.7 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f1\/bc\/a3\/f1bca34655f410d50ca38de6a053d6a4.png\" alt=\"\u042f\u0432\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 &quot;&quot; \u0438 &quot;\/&quot; \u043d\u0430 \u0432\u0441\u0435\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\" width=\"2800\" height=\"1544\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f1\/bc\/a3\/f1bca34655f410d50ca38de6a053d6a4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f1\/bc\/a3\/f1bca34655f410d50ca38de6a053d6a4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u042f\u0432\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 &#171;&#187; \u0438 &#171;\/&#187; \u043d\u0430 \u0432\u0441\u0435\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<h4>Security 6 \u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0448\u0438\u0431\u043a\u0438<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f ERROR-dispatch, \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a \u0441 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 401 \u0432\u043c\u0435\u0441\u0442\u043e 404.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e.\u00a0<code>permitAll<\/code>\u00a0\u0434\u043b\u044f\u00a0<code>\/api\/public\/**<\/code>\u00a0\u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0441\u044f. \u041d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u00a0<code>ResponseStatusException<\/code>, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430\u00a0<code>\/error<\/code>, \u0430 Security 6\u00a0<a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/servlet\/authorization\/authorize-http-requests.html#_all_dispatches_are_authorized\">\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f dispatch<\/a>, \u0432\u043a\u043b\u044e\u0447\u0430\u044f ERROR. \u041e\u0431 \u044d\u0442\u043e\u043c \u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0438\u00a0<a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.0-Migration-Guide#dispatch-types\">\u0433\u0430\u0439\u0434 \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 Boot<\/a>. \u0410\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043e\u00a0<code>\/error<\/code>\u00a0\u043d\u0435 \u043f\u0443\u0441\u043a\u0430\u044e\u0442, \u0438 \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 401. \u0412 2.7 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f. \u0421\u0430\u043c \u043f\u0440\u0438\u0451\u043c \u0441\u00a0<code>dispatcherTypeMatchers(DispatcherType.ERROR).permitAll()<\/code>\u00a0\u0435\u0441\u0442\u044c \u0432\u00a0<a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/servlet\/authorization\/authorize-http-requests.html#match-by-dispatcher-type\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Spring Security<\/a>.<\/p>\n<p>\u041f\u043e\u0447\u0438\u043d\u0438\u043b\u043e\u0441\u044c \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439\u00a0<code>dispatcherTypeMatchers(DispatcherType.ERROR).permitAll()<\/code>, \u0438 \u0430\u0433\u0435\u043d\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0440\u044f\u0434\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f8\/f8\/73\/f8f873f3790c79a25d9f75edd8e28b57.png\" alt=\"SecurityFilterChain: ERROR-dispatch \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d, \u0438\u043d\u0430\u0447\u0435 404 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 401\" width=\"2800\" height=\"1544\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f8\/f8\/73\/f8f873f3790c79a25d9f75edd8e28b57.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f8\/f8\/73\/f8f873f3790c79a25d9f75edd8e28b57.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>SecurityFilterChain: ERROR-dispatch \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d, \u0438\u043d\u0430\u0447\u0435 404 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 401<\/figcaption><\/div>\n<\/figure>\n<h4>\u0420\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442 gateway \u0441 16 \u041a\u0411 \u0432\u00a0<code>X-Client-Context<\/code>\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 400 \u0435\u0449\u0451 \u043e\u0442 Tomcat, \u0434\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u043d \u0434\u0430\u0436\u0435 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>\u0412 Boot 3.0 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u00a0<code>server.max-http-header-size<\/code>\u00a0<a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.0-Migration-Guide#servermax-http-header-size\">\u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c<\/a>\u00a0\u0432 \u043f\u043e\u043b\u044c\u0437\u0443\u00a0<code>server.max-http-request-header-size<\/code>, \u0430 \u043a 3.5 \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0432\u0441\u0435\u043c. \u0421\u0442\u0430\u0440\u043e\u0435 \u0438\u043c\u044f \u0432 YAML \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442. Spring \u043c\u043e\u043b\u0447\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0438 Tomcat \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c 8 \u041a\u0411.<\/p>\n<p>\u0424\u0438\u043a\u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u044d\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0412 \u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435 \u0432\u0438\u0434\u043d\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u043e \u043d\u0435\u0439 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f9\/bc\/4c\/f9bc4c09d17d5aec2e6c77690bd208b7.png\" alt=\"application.yml: \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u044f\u0432\u043d\u0430\u044f B3-\u043f\u0440\u043e\u043f\u0430\u0433\u0430\u0446\u0438\u044f\" width=\"2800\" height=\"1544\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f9\/bc\/4c\/f9bc4c09d17d5aec2e6c77690bd208b7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f9\/bc\/4c\/f9bc4c09d17d5aec2e6c77690bd208b7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>application.yml: \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u044f\u0432\u043d\u0430\u044f B3-\u043f\u0440\u043e\u043f\u0430\u0433\u0430\u0446\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<h4>Flyway \u0438 PostgreSQL<\/h4>\n<p>\u041f\u044f\u0442\u0430\u044f \u0437\u0430\u0449\u0438\u0442\u0430 \u043d\u0435 \u0442\u0438\u0445\u0430\u044f, \u043d\u043e \u0430\u0433\u0435\u043d\u0442 \u0432\u043d\u0451\u0441 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0435\u0451. \u0411\u0435\u0437 \u043c\u043e\u0434\u0443\u043b\u044f\u00a0<code>flyway-database-postgresql<\/code>\u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0438 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u00a0<code>FlywayException: Unsupported Database: PostgreSQL 16.6<\/code>. \u0422\u0430\u043a\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0448\u044c \u0441\u0440\u0430\u0437\u0443, \u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0432 \u0447\u0451\u043c \u0434\u0435\u043b\u043e, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<h3>\u0418\u0442\u043e\u0433<\/h3>\n<p>\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0430\u0433\u0435\u043d\u0442 \u043e\u0442\u0447\u0451\u0442\u043e\u043c \u0432 \u0442\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0438\u043b\u00a0<code>docs\/MIGRATION.md<\/code>. \u0412 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0430\u0434\u0430\u043b\u0438 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/e7\/4e\/9a\/e74e9abdee248860636f099c3d05dfff.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u0437 \u043e\u0442\u0447\u0451\u0442\u0430 \u0430\u0433\u0435\u043d\u0442\u0430\" width=\"2880\" height=\"1624\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/e7\/4e\/9a\/e74e9abdee248860636f099c3d05dfff.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/e7\/4e\/9a\/e74e9abdee248860636f099c3d05dfff.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u0437 \u043e\u0442\u0447\u0451\u0442\u0430 \u0430\u0433\u0435\u043d\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0441\u043b\u043e\u0432\u043e \u044f \u043e\u0442\u0447\u0451\u0442\u0443 \u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u043b \u0438 \u043f\u0440\u043e\u0433\u043d\u0430\u043b \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0430\u043c.<\/p>\n<pre><code class=\"bash\">$ .\/gw clean buildBUILD SUCCESSFUL$ .\/gw contractTest12 tests completed, 12 passedBUILD SUCCESSFUL$ git diff --stat boot-2.7 -- src\/contractTest(\u043f\u0443\u0441\u0442\u043e)$ git diff --stat boot-2.78 files changed, 68 insertions(+), 61 deletions(-)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u043b\u043e\u0433\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0440\u043e\u0432\u043d\u044f WARN \u0438\u043b\u0438 ERROR.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041c\u043e\u0434\u0435\u043b\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">Koda Pro, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0438\u0441\u043a\u043e\u0432 (\u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441)<\/p>\n<\/td>\n<td>\n<p align=\"left\">8 \u043c\u0438\u043d\u0443\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043e\u0442 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0434\u043e \u043e\u0442\u0447\u0451\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">24 \u043c\u0438\u043d\u0443\u0442\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043d\u0430 3.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">14 \u043c\u0438\u043d\u0443\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u043e \u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">8, +68 \/ \u221261 \u0441\u0442\u0440\u043e\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">12 \u0438\u0437 12, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u0427\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a<\/h3>\n<p><strong>\u0410\u0433\u0435\u043d\u0442 \u0442\u0440\u043e\u0433\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434, \u043d\u043e \u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435.<\/strong>\u00a0\u041a\u043e\u0433\u0434\u0430 Docker \u043d\u0435 \u043d\u0430\u0448\u0451\u043b\u0441\u044f, \u043e\u043d \u0437\u0430\u0432\u0451\u043b \u0440\u043e\u043b\u044c \u0438 \u0431\u0430\u0437\u0443 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c PostgreSQL \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443\u00a0<code>docker<\/code>\u00a0\u0432\u00a0<code>\/tmp<\/code>. \u041e\u043d \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b, \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u041d\u043e \u0443\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u0430\u0433\u0435\u043d\u0442 \u0440\u0435\u0448\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u0430\u043c, \u0438 \u043f\u043e\u0441\u043b\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432\u0430\u0448 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 PostgreSQL \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a\u0438\u043c, \u043a\u0430\u043a \u0434\u043e \u043d\u0435\u0451. \u0421 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c Docker \u0441\u043a\u0440\u0438\u043f\u0442\u00a0<a href=\"http:\/\/contract-check.sh\"><code>contract-check.sh<\/code><\/a>\u00a0\u043e\u043d \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b, \u043e \u0447\u0451\u043c \u0447\u0435\u0441\u0442\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432 \u043e\u0442\u0447\u0451\u0442\u0435.<\/p>\n<p><strong>\u041f\u0440\u043e\u043c\u0430\u0445 \u0441 B3.<\/strong>\u00a0\u041e\u0442\u0432\u0435\u0447\u0430\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, Kodacode \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0437\u0430\u044f\u0432\u0438\u043b, \u0447\u0442\u043e Micrometer Tracing \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e W3C \u0438 B3-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043e\u0442 gateway \u043f\u043e\u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0412 Boot 3.5 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u00a0<a href=\"https:\/\/docs.spring.io\/spring-boot\/3.5\/appendix\/application-properties\/index.html#application-properties.actuator.management.tracing.propagation.consume\"><code>management.tracing.propagation.consume<\/code><\/a>\u00a0\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u043d\u043e\u00a0<code>[W3C, B3, B3_MULTI]<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 B3-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0438 \u0431\u0435\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c \u0432 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u043b \u0437\u0430\u0449\u0438\u0442\u044b. \u0422\u0435\u0441\u0442 \u043f\u0440\u043e\u0448\u0451\u043b \u0438 \u0431\u0435\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0438 \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c \u043e\u0442\u0447\u0451\u0442\u0435 \u043e\u043d \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e B3-\u043f\u0440\u043e\u043f\u0430\u0433\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0430 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c. \u0425\u0443\u0436\u0435 \u0442\u043e, \u0447\u0442\u043e \u043e\u0434\u043d\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u00ab\u0432\u0441\u0435 \u043f\u044f\u0442\u044c \u0437\u0430\u0449\u0438\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f\u043c\u0438\u00bb) \u0431\u044b\u043b\u043e \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u043c, \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0442\u0447\u0451\u0442\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u0447\u0451\u0442, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>\u0421\u0430\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443\u00a0<code>propagation.type: B3_MULTI<\/code>\u00a0\u0430\u0433\u0435\u043d\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u00ab\u043a\u0430\u043a \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f gateway\u00bb. \u0421\u043e\u0432\u0441\u0435\u043c \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0435\u0451 \u043d\u0435 \u043d\u0430\u0437\u043e\u0432\u0451\u0448\u044c, \u0442\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0442\u0434\u0430\u0451\u0442 B3-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b Sleuth \u0432 2.7. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0441 W3C\u00a0<code>traceparent<\/code>, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.<\/p>\n<p><strong>\u0427\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0435.<\/strong>\u00a0\u0410\u0433\u0435\u043d\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043b, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0436\u0434\u0443\u0442 \u0440\u0435\u0432\u044c\u044e. \u0410 \u0435\u0449\u0451 \u043e\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0432\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438\u0441\u044c. \u0415\u0441\u043b\u0438\u00a0<code>spring.sleuth.*<\/code>\u00a0\u0438\u043b\u0438 \u0441\u0442\u0430\u0440\u043e\u0435\u00a0<code>server.max-http-header-size<\/code>\u00a0\u0437\u0430\u0434\u0430\u043d\u044b \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 ConfigMap, \u0438\u0445 \u043d\u0430\u0434\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438 \u0432\u044b\u043a\u0430\u0442\u043a\u0435. \u0418\u043d\u0430\u0447\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0436\u0435 \u0432 \u043f\u0440\u043e\u0434\u0435.<\/p>\n<h3>\u0427\u0435\u043a\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430<\/h3>\n<ol>\n<li>\n<p><strong>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u043f\u043e\u0442\u043e\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f.<\/strong>\u00a0\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 API \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 Spring \u0438 \u043d\u0435 \u043c\u0438\u0433\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u043f\u0438\u0448\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u0430 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/strong>\u00a0\u0417\u0430\u043f\u0440\u0435\u0442 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0435\u0436\u0430\u0442\u044c \u0440\u044f\u0434\u043e\u043c \u0441 \u043a\u043e\u0434\u043e\u043c, \u0430 \u043d\u0435 \u0442\u0435\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435. \u0410 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d, \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437\u00a0<code>git diff<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435 \u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0437\u0435\u043b\u0451\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u043e\u043d\u0443.<\/strong>\u00a0\u041e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0443\u043f\u0430\u0434\u0451\u0442. \u0415\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u0438\u043d, \u0437\u043d\u0430\u0447\u0438\u0442 \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u0438\u0448\u043d\u0435\u0435, \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0430 \u0432\u0440\u0435\u043c\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u00a0<\/strong><a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.0-Migration-Guide#configuration-properties-migration\"><code><strong>spring-boot-properties-migrator<\/strong><\/code><\/a><strong>.<\/strong>\u00a0\u041e\u043d \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0430\u0447\u0435 \u043c\u043e\u043b\u0447\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u0418 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0432\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0442\u0438\u0445\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/strong>\u00a0\u042d\u0442\u043e \u043f\u0443\u0442\u0438 \u0441\u043e \u0441\u043b\u044d\u0448\u0435\u043c \u043d\u0430 \u043a\u043e\u043d\u0446\u0435, \u043e\u0442\u0432\u0435\u0442\u044b \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 JPA.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0433\u043e\u043d\u0438\u0442\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u043a\u043e\u043f\u0438\u0438 \u043f\u0440\u043e\u0434\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u044b.<\/strong>\u00a0\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 sequence \u0438\u00a0<code>ddl-auto: none<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u042f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0443\u0432\u0438\u0436\u0443, \u043a\u0430\u043a \u0430\u0433\u0435\u043d\u0442 \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u0435\u0442\u0441\u044f \u043e \u0442\u0438\u0445\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f Spring Boot 3 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0442\u0435\u0441\u0442\u0430\u043c. \u0410 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443. Kodacode \u043d\u0430\u0448\u0451\u043b \u0432\u0441\u0435 \u043b\u043e\u0432\u0443\u0448\u043a\u0438 \u0435\u0449\u0451 \u0434\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u0437\u0430\u043a\u0440\u044b\u043b \u0438\u0445 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0430\u043c \u043b\u043e\u043c\u0430\u043b \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u043e \u043d\u0443\u0436\u043d\u043e. \u0418 \u0437\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0435 \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c \u043d\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438.<\/p>\n<p>\u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0418\u0418 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e? <strong>\u041e\u0442\u0434\u0430\u0442\u044c \u0438 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f. <\/strong>\u0410\u0433\u0435\u043d\u0442 \u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0438\u043d\u043e\u0433\u0434\u0430 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u0448\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0434\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u0445. \u041d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0435\u043c\u0443 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0438 \u0430\u0433\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0441\u0435\u0431\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0434\u043e\u0432\u0435\u0440\u0438\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0445, \u0430 \u0441\u0442\u0440\u0430\u0448\u043d\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0414\u0435\u043c\u043e-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c, \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0438 \u0432\u0435\u0442\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430\u00a0<a href=\"http:\/\/github.com\/befayer\/spring-boot-27-migration-demo\">github.com\/befayer\/spring-boot-27-migration-demo<\/a>. <\/p>\n<h3>\u0427\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.0-Migration-Guide\">Spring Boot 3.0 Migration Guide<\/a>, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043f\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u043e\u0432\u0443\u0448\u0435\u043a \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043d\u0451\u043c.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/servlet\/authorization\/authorize-http-requests.html\">Spring Security, \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/a>, \u0433\u0434\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u0438\u043f\u044b dispatch.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/hibernate\/hibernate-orm\/blob\/6.0\/migration-guide.adoc\">Hibernate ORM 6.0 Migration Guide<\/a>, \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/micrometer-metrics\/tracing\/wiki\/Spring-Cloud-Sleuth-3.1-Migration-Guide\">Spring Cloud Sleuth 3.1 Migration Guide<\/a>, \u043f\u0440\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441\u043e Sleuth \u043d\u0430 Micrometer Tracing.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.spring.io\/spring-boot\/3.5\/appendix\/application-properties\/index.html\">Spring Boot 3.5, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a>, \u0433\u0434\u0435 \u0432\u0438\u0434\u043d\u044b \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0443 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441 3.5 \u043d\u0430 Spring Boot 4.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c Kodacode \u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442:\u00a0<a href=\"https:\/\/download.kodacode.ru\/?utm_source=habr&amp;utm_medium=referral&amp;utm_campaign=article_footer&amp;utm_content=banner_caption\">\u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0434\u043b\u044f\u00a0IDE, CLI \u0438 Desktop<\/a>. \u0410\u043d\u043e\u043d\u0441\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u044b \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0432\u00a0<a href=\"https:\/\/t.me\/+2nah4b84yBQ4YjVi\">Telegram\u2011\u043a\u0430\u043d\u0430\u043b\u0435<\/a>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/85c\/951\/be1\/85c951be1da68bb14f1e219a1208dfaa.png\" width=\"1472\" height=\"300\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/85c\/951\/be1\/85c951be1da68bb14f1e219a1208dfaa.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/85c\/951\/be1\/85c951be1da68bb14f1e219a1208dfaa.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1098702\/\">https:\/\/habr.com\/ru\/articles\/1098702\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0434\u0435 \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f Spring Boot 2.7. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c \u0435\u0449\u0451 \u0432 \u043d\u043e\u044f\u0431\u0440\u0435 2023 \u0433\u043e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430\u00a0\u0432\u044b\u0448\u0435\u043b 2.7.18, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u043a\u0438 2.x. \u041d\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u043c\u043d\u043e\u0433\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0441\u0451 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u0438 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442. \u0418 \u043d\u0435\u0442, \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0432 \u043b\u0435\u043d\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u0435\u043d\u0443 \u043d\u043e\u043c\u0435\u0440\u0430 \u0432\u00a0build.gradle.\u041f\u0440\u0438\u0447\u0451\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0442\u0443\u0442 \u043f\u0443\u0433\u0430\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u0417\u0430\u043c\u0435\u043d\u0443\u00a0javax.*\u00a0\u043d\u0430\u00a0jakarta.*\u00a0\u0438\u043b\u0438 \u043f\u0440\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u00a0WebSecurityConfigurerAdapter\u00a0\u0432\u0438\u0434\u043d\u043e \u0441\u0440\u0430\u0437\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u0443\u043f\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435 \u0442\u043e, \u0447\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u0438\u0445\u0443\u044e. \u041a\u043e\u0434 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f, health-check \u0437\u0435\u043b\u0451\u043d\u044b\u0439, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c 404, 401 \u0438 500 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u044d\u0442\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043b\u044f \u0418\u0418-\u0430\u0433\u0435\u043d\u0442\u0430. \u0420\u0430\u0431\u043e\u0442\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043d\u0443\u0434\u043d\u0430\u044f \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u0433\u043e\u0442\u043e\u0432 \u043e\u0442\u0434\u0430\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0434\u0435. \u0418 \u044f \u044d\u0442\u0438 \u043e\u043f\u0430\u0441\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e. \u0410\u0433\u0435\u043d\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0437\u0435\u043b\u0451\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e\u0434 \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u0431\u043e\u0434\u0440\u043e \u043e\u0442\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e. \u0410 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437 \u0442\u0435\u0445, \u0447\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u0438 \u043c\u043e\u0434\u0435\u043b\u0438.\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u0434\u0435\u043b\u0435. \u042f \u0432\u0437\u044f\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 Spring Boot 2.7 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b Kodacode \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u043d\u0430 3.5. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0433\u043b\u0430\u0437 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u043c \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u0441\u0442\u0430\u043b \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0433\u0435\u043d\u0442\u0443 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e. \u0415\u0441\u043b\u0438 \u0430\u0433\u0435\u043d\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043e\u043d \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u044d\u0442\u0438 \u0442\u0435\u0441\u0442\u044b, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0432 \u043d\u0438\u0445 \u043d\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438.\u0412\u043e\u0442 \u043e \u0447\u0451\u043c \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c.\u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0440\u0438\u0441\u043a \u0432 \u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445;\u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043c\u0438\u0433\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c;\u0447\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 2.7 \u0438 3.x \u0438 \u0447\u0435\u0433\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440;\u043a\u0430\u043a \u0430\u0433\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0451\u043b \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0438 \u043a\u0430\u043a \u0441\u0430\u043c \u0434\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e;\u0433\u0434\u0435 \u0430\u0433\u0435\u043d\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0430 \u0433\u0434\u0435 \u0431\u0435\u0437 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c;\u0447\u0435\u043a\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430.\u041f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441Billing Service \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043f\u043b\u0430\u0442\u0443 \u0441\u0447\u0435\u0442\u043e\u0432. \u041e\u043d \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0447\u0451\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0447\u0435\u0442\u043e\u0432 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0447\u0451\u0442, \u043e\u0442\u043c\u0435\u043d\u044f\u0442\u044c \u043e\u043f\u043b\u0430\u0442\u0443 \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a\u0443 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438\u0437 \u043f\u0438\u0441\u044c\u043c\u0430.\u041c\u0435\u0442\u043e\u0434\u041f\u0443\u0442\u044c\u0414\u043e\u0441\u0442\u0443\u043f\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435POST\/api\/invoicesBasic\u0412\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0447\u0451\u0442GET\/api\/invoicesBasic\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0447\u0435\u0442\u043e\u0432GET\/api\/invoices\/{id}Basic\u0421\u0447\u0451\u0442 \u043f\u043e idPOST\/api\/invoices\/{id}\/paymentsBasic\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u043f\u043b\u0430\u0442\u0443GET\/api\/public\/pay\/{token}\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u043f\u043b\u0430\u0442\u044b \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a\u0430GET\/actuator\/health\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439Health check\u0421\u0442\u0435\u043a \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. Java 11, Spring Boot 2.7.18, Spring Data JPA \u0441 Hibernate 5.6, Flyway \u0438 PostgreSQL. \u0421\u0435\u043a\u0443\u0440\u0438\u0442\u0438 \u0447\u0435\u0440\u0435\u0437\u00a0WebSecurityConfigurerAdapter\u00a0\u0438 HTTP Basic, \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Spring Cloud Sleuth.build.gradle.kts: Spring Boot 2.7.18 \u0438 Java 11\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430: JPA, Security, Sleuth, Flyway\u041d\u043e \u043a\u043e\u0434 \u0442\u0443\u0442 \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0445.\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 3.x\u00a0\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0438 \u0441\u043e \u0441\u043b\u044d\u0448\u0435\u043c \u043d\u0430 \u043a\u043e\u043d\u0446\u0435, \u0442\u043e \u0435\u0441\u0442\u044c\u00a0\/api\/invoices\/;API gateway\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 B3 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u00a0X-Client-Context\u00a0\u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0434\u043e 16 \u041a\u0411;\u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a\u0438\u00a0\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u00a0\/api\/public\/pay\/{token}\u00a0\u0438\u0437 \u043f\u0438\u0441\u044c\u043c\u0430 \u0431\u0435\u0437 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u0430, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c 404, \u0430 \u043d\u0435 \u0444\u043e\u0440\u043c\u0443 \u0432\u0445\u043e\u0434\u0430.\u0412 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u0447\u0435\u043a\u043b\u0438\u0441\u0442\u0430\u0445 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u043f\u0438\u0448\u0443\u0442, \u0430 \u0432 \u0436\u0438\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u043b\u043e\u0448\u044c \u0438 \u0440\u044f\u0434\u043e\u043c. \u041a\u043e\u0434 \u0434\u0435\u043c\u043e \u043b\u0435\u0436\u0438\u0442 \u0432\u00a0github.com\/befayer\/spring-boot-27-migration-demo.\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u043e\u0432\u0435\u0440\u0438\u044f \u043d\u0430 \u0441\u043b\u043e\u0432\u043e\u041f\u0435\u0440\u0435\u0434 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0435\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e unit- \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043c\u0438\u0433\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c. \u0412 \u043d\u0438\u0445 \u0442\u043e\u0436\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043c\u0435\u043d\u044f\u0442\u044c\u00a0javax\u00a0\u043d\u0430\u00a0jakarta, \u0447\u0438\u043d\u0438\u0442\u044c\u00a0@SpringBootTest, MockMvc \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Security. \u0418 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0438 \u0437\u0435\u043b\u0451\u043d\u044b\u0435, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u0435\u0441\u0442\u044b \u0438 \u043a\u043e\u0434 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438\u0441\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0410 \u0432\u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c, \u043e\u043d\u0438 \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442.\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u044f \u0432\u044b\u043d\u043e\u0448\u0443 \u043d\u0430\u0440\u0443\u0436\u0443. \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0439 HTTP-\u043a\u043b\u0438\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e Spring \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437\u00a0java.net.http.HttpClient\u00a0\u0438\u0437 JDK;\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u0441\u0442\u043e\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c JDBC;\u0442\u0435\u0441\u0442\u044b \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c source set\u00a0src\/contractTest\u00a0\u0438 \u0441\u0442\u0443\u0447\u0430\u0442\u0441\u044f \u0432 \u0443\u0436\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u00a0TARGET_BASE_URL.\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043b\u0435\u0436\u0430\u0442 \u0440\u044f\u0434\u043e\u043c \u0441 main \u0438 test, \u043d\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c source set\u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u043e, \u043d\u0430 \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0433\u043e \u0436\u0434\u0451\u0442 \u043f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a \u0441 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439.@Test@DisplayName(&#171;\u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 \u2014 404, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f&#187;)void expiredPaymentLinkIsNotFound() throws Exception {    HttpResponse&lt;String&gt; response = api.send(api.request(&#171;\/api\/public\/pay\/expired-token&#187;).GET());    assertEquals(404, response.statusCode(), response.body());    assertEquals(404, json(response).path(&#171;status&#187;).asInt());    assertEquals(&#171;\/api\/public\/pay\/expired-token&#187;, json(response).path(&#171;path&#187;).asText());}\u0412\u0441\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432 12. \u041e\u043d\u0438 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0441\u043e \u0441\u0447\u0435\u0442\u0430\u043c\u0438, \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 gateway. \u0421\u043a\u0440\u0438\u043f\u0442\u00a0scripts\/contract-check.sh\u00a0\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 PostgreSQL \u0438 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0442\u043a\u0438, \u0433\u043e\u043d\u044f\u0435\u0442 \u0442\u0435\u0441\u0442\u044b \u0438 \u0433\u0430\u0441\u0438\u0442 \u0441\u0435\u0440\u0432\u0438\u0441. \u0422\u0430\u043a \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043d\u0430\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u043d\u0430 2.7, \u0438 \u043d\u0430 3.5. \u0423\u0441\u043f\u0435\u0445.\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443 \u043f\u043e\u0434\u0433\u043e\u043d\u044f\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u043f\u043e\u0434 \u043d\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u044f \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442, \u0430 \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0432\u00a0AGENTS.md. \u0410\u0433\u0435\u043d\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.AGENTS.md: \u0442\u0435\u0441\u0442\u044b \u0432 src\/contractTest \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u0440\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0435 \u2014 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c\u0412\u0435\u0440\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0git diff boot-2.7 &#8212; src\/contractTest\u00a0\u043f\u0443\u0441\u0442\u043e\u0439.\u0410 \u043b\u043e\u0432\u044f\u0442 \u043b\u0438 \u044d\u0442\u0438 \u0442\u0435\u0441\u0442\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c? \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441 \u0430\u0433\u0435\u043d\u0442\u0443, \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u044d\u0442\u043e \u0441\u0430\u043c \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u00ab\u043d\u0430\u0438\u0432\u043d\u0443\u044e\u00bb \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e. \u041f\u043e\u043f\u0440\u0430\u0432\u0438\u043b \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u043d\u0430 \u0447\u0442\u043e \u0440\u0443\u0433\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e. \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b, health-check \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u00a0UP, \u0430 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0443\u043f\u0430\u043b\u0438 \u0432 7 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0437 12. \u0411\u044b\u043b\u043e 500 \u043f\u0440\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0447\u0451\u0442\u0430, 404 \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435, 401 \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 400 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043e\u0442 gateway. \u041d\u0430\u0438\u0432\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u044f \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u043a\u0438\u043d\u0443\u043b, \u0438 \u0430\u0433\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 2.7.\u0427\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 2.7 \u0438 3.xSpring Boot 3.0 \u0441\u0442\u0430\u043b \u0441\u0430\u043c\u044b\u043c \u043a\u0440\u0443\u043f\u043d\u044b\u043c \u0440\u0435\u043b\u0438\u0437\u043e\u043c \u0441\u043e \u0432\u0440\u0435\u043c\u0451\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041d\u0438\u0436\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0435\u043d\u0443\u0442 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441. \u0421\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435.\u041e\u0431\u043b\u0430\u0441\u0442\u044c\u0427\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f\u0412\u0438\u0434\u043d\u043e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435?Java\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u2014 17\u0434\u0430Jakarta EEjavax.*\u00a0\u2192\u00a0jakarta.*\u0434\u0430Spring Security 6\u0443\u0434\u0430\u043b\u0451\u043d\u00a0WebSecurityConfigurerAdapter,\u00a0antMatchers\u00a0\u2192\u00a0requestMatchers, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0432\u0441\u0435 \u0442\u0438\u043f\u044b dispatch, \u0432\u043a\u043b\u044e\u0447\u0430\u044f ERROR\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043eSpring MVC 6\u0441\u043b\u044d\u0448 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043f\u0443\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c \u0431\u0435\u0437 \u043d\u0435\u0433\u043e\u043d\u0435\u0442Hibernate 6\u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 sequence \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0442\u0438\u043f\u0430\u0445 \u0438 HQL\u043d\u0435\u0442\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0447\u0430\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0430 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0430; \u0441\u0442\u0430\u0440\u044b\u0435 \u043c\u043e\u043b\u0447\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f\u043d\u0435\u0442\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0441\u0442\u044cSpring Cloud Sleuth \u2192 Micrometer Tracing\u0434\u0430Flyway 10+\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 PostgreSQL \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c\u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435\u0412\u0441\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u00a0Spring Boot 3.0 Migration Guide.\u041f\u043e\u0447\u0435\u043c\u0443 3.5, \u0430 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 4.x? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 2.7 \u2192 3.x \u0441\u0430\u043c\u044b\u0439 \u0442\u044f\u0436\u0451\u043b\u044b\u0439. Jakarta, Security 6 \u0438 Hibernate 6 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0440\u0430\u0437 \u0437\u0434\u0435\u0441\u044c. \u0412\u0435\u0442\u043a\u0430 3.x \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 3.5, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430. \u0427\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0438 \u0443 3.5\u00a0\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430\u00a0\u0443\u0436\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0432 \u0438\u044e\u043d\u0435 2026 \u0433\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0439 \u043d\u0430\u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u041f\u0440\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 3.5 \u2192 4 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.\u041e\u0442\u0434\u0430\u044e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0430\u0433\u0435\u043d\u0442\u0443\u0420\u0430\u0431\u043e\u0442\u0430\u043b \u044f \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 Kodacode \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 Koda Pro \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439. \u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u0440\u044b\u043b \u043d\u0430 \u0432\u0435\u0442\u043a\u0435\u00a0migration\/boot-3.5, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u043b \u043e\u0442 \u0442\u0435\u0433\u0430\u00a0boot-2.7, \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u00ab\u0411\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439\u00bb, \u0433\u0434\u0435 \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c \u0447\u0438\u0442\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043f\u0440\u0430\u0432\u0438\u0442 \u043a\u043e\u0434.\u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 \u0432 Kodacode, \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c koda-pro\u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u044f \u0437\u0430\u0434\u0430\u043b \u0430\u0433\u0435\u043d\u0442\u0443 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u043f\u043e\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c.\u0427\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u0447\u0442\u043e \u0432 \u043d\u0451\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 Spring Boot 3.5? \u041f\u043e\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0439.\u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0430\u0433\u0435\u043d\u0442 \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u043a\u043e\u0434\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. \u0414\u0443\u043c\u0430\u043b \u043e\u043d \u043f\u043e\u0447\u0442\u0438 \u0432\u043e\u0441\u0435\u043c\u044c \u043c\u0438\u043d\u0443\u0442. \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0434\u0432\u0430\u0436\u0434\u044b \u0441\u0445\u043e\u0434\u0438\u043b \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439.\u041e\u0442\u0432\u0435\u0442 \u0430\u0433\u0435\u043d\u0442\u0430: \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u043d\u044b \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438\u0420\u0438\u0441\u043a\u0438 \u043e\u043d \u043f\u043e\u0434\u0435\u043b\u0438\u043b \u043d\u0430 \u0434\u0432\u0435 \u043a\u0443\u0447\u043a\u0438. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043f\u0430\u043b\u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u0434\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f, \u0432\u0440\u043e\u0434\u0435\u00a0javax\u00a0\u2192\u00a0jakarta, \u043f\u0440\u043e\u043f\u0430\u0432\u0448\u0435\u0433\u043e\u00a0WebSecurityConfigurerAdapter\u00a0\u0438 Sleuth. \u0412\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043d\u0430\u0437\u0432\u0430\u043b \u00ab\u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043b\u043e\u0432\u0443\u0448\u043a\u0438 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0432\u0430\u043b\u044f\u0442 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u00bb, \u043f\u0440\u0438\u0447\u0451\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0430\u0434\u0451\u0442.\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043b\u043e\u0432\u0443\u0448\u0435\u043a: \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0438 \u0442\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0430\u0434\u0451\u0442\u0418 \u043f\u043e\u043f\u0430\u043b \u0432 \u0442\u043e\u0447\u043a\u0443, \u043d\u0430\u0437\u0432\u0430\u0432 \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043b\u043e\u0432\u0443\u0448\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0437\u0430\u043b\u043e\u0436\u0438\u043b \u0432 \u0441\u0435\u0440\u0432\u0438\u0441.Hibernate 6 \u0438\u0449\u0435\u0442\u00a0invoices_seq\u00a0\u0432\u043c\u0435\u0441\u0442\u043e\u00a0hibernate_sequence\u00a0\u2192 \u043b\u044e\u0431\u043e\u0439\u00a0POST \/api\/invoices\u0434\u0430\u0441\u0442 500;\u0441\u043b\u044d\u0448 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043f\u0443\u0442\u0438 \u2192\u00a0\/api\/invoices\/\u00a0\u0434\u0430\u0441\u0442 404;Security 6 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u043a\u00a0\/error\u00a0\u2192 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 \u0434\u0430\u0441\u0442 401 \u0432\u043c\u0435\u0441\u0442\u043e 404;server.max-http-header-size\u00a0\u043c\u043e\u043b\u0447\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u2192 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 16 \u041a\u0411 \u0434\u0430\u0441\u0442 400.\u0411\u0435\u0437 \u043f\u0440\u043e\u043c\u0430\u0445\u0430 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c. \u0410\u0433\u0435\u043d\u0442 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f B3-\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430. \u041d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435.\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0444\u0438\u043a\u0441\u0430 \u0434\u043b\u044f sequence \u0438 \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e\u041d\u043e \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u0435\u0449\u0451 \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0417\u043d\u0430\u0442\u044c \u043f\u0440\u043e \u043b\u043e\u0432\u0443\u0448\u043a\u0443 \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0435\u0451 \u0432 \u0436\u0438\u0432\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u043c\u043e\u0442\u0440\u044e, \u0434\u043e\u0442\u044f\u043d\u0435\u0442 \u043b\u0438 \u0430\u0433\u0435\u043d\u0442 \u0434\u043e \u0437\u0435\u043b\u0451\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.\u041f\u0440\u043e\u043c\u043f\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c. \u0412\u0441\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0430 \u043d\u0435 \u0432 \u043d\u0451\u043c. \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u00a0AGENTS.md, \u043e\u0431\u044a\u0451\u043c \u0438 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u0432\u00a0docs\/MIGRATION.md. \u041f\u0440\u043e\u043c\u043f\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0437\u0430\u0434\u0430\u0447\u0443.\u041f\u0435\u0440\u0435\u0432\u0435\u0434\u0438 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u043e Spring Boot 2.7 \u043d\u0430 Spring Boot 3.5.\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439 `AGENTS.md` \u0438 `docs\/MIGRATION.md`, \u0437\u0430\u0442\u0435\u043c \u0438\u0437\u0443\u0447\u0438 \u043a\u043e\u0434 \u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435\u0442\u0435\u0441\u0442\u044b \u0432 `src\/contractTest`.\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u044b:1. \u0417\u0430\u043f\u0443\u0441\u0442\u0438 `scripts\/contract-check.sh` \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.2. \u0421\u043e\u0441\u0442\u0430\u0432\u044c \u043f\u043b\u0430\u043d \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438 \u0440\u0438\u0441\u043a\u0438.3. \u0412\u044b\u043f\u043e\u043b\u043d\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e.4. \u0417\u0430\u043f\u0443\u0441\u0442\u0438 `.\/gw build` \u0438 `scripts\/contract-check.sh`.5. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0430\u0434\u0430\u044e\u0442, \u043d\u0430\u0439\u0434\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u044c \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.   \u0422\u0435\u0441\u0442\u044b \u0438 \u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u0435 \u043c\u0435\u043d\u044f\u0439.6. \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0439, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u0440\u0438\u0451\u043c\u043a\u0438 \u0438\u0437 `docs\/MIGRATION.md` \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b.\u0412 \u043a\u043e\u043d\u0446\u0435 \u0434\u0430\u0439 \u043e\u0442\u0447\u0451\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0438\u0437 `docs\/MIGRATION.md`.\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432 \u0442\u043e\u0442 \u0436\u0435&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-500050","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500050","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=500050"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500050\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=500050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}