{"id":12448,"date":"2022-11-24T13:41:48","date_gmt":"2022-11-24T12:41:48","guid":{"rendered":"https:\/\/vived.io\/?p=12448"},"modified":"2022-11-24T13:43:38","modified_gmt":"2022-11-24T12:43:38","slug":"nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/","title":{"rendered":"Nowa era Springa &#8211; Spring Framework 6.0, Spring Boot 3.0, Spring Modulith &#8211; JVM Weekly #114"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"528\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-38.png\" alt=\"\" class=\"wp-image-12476\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-38.png 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-38-284x300.png 284w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>Wbrew temu, co si\u0119 przyj\u0119\u0142o, \u015bwiat Javy jest ostatnimi laty ca\u0142kiem dynamiczny. Pojawia si\u0119 spora ilo\u015b\u0107 nowych inicjatyw, framework\u00f3w czy zmianach w standardach &#8211; na tyle du\u017co, by zracjonalizowa\u0107 pojawianie si\u0119 cotygodniowego przegl\u0105du. Prawd\u0105 jednak jest, \u017ce cho\u0107 ta proporcja nieco si\u0119 ostatnimi latami zmienia, to jednak w tym \u015bwiecie dalej dzieli i rz\u0105dzi Spring &#8211; i mowa tutaj zar\u00f3wno o starszych projektach, jak i o nowych inicjatywach. Dlatego te\u017c, cho\u0107 mo\u017cemy si\u0119 cieszy\u0107 z tego, jak inne frameworki czy biblioteki pchaj\u0105 ekosystem do przodu, tak ju\u017c szeroko poj\u0119ta adopcja standard\u00f3w jak GraalVM czy JPMS zale\u017cy od Kr\u00f3la. A \u017ce ostatnie tygodnie to masa wa\u017cnych og\u0142osze\u0144 od Springa, to dzisiejsz\u0105 edycj\u0119 po\u015bwi\u0119cimy w\u0142a\u015bnie jemu. Przygl\u0105dniemy si\u0119 premierze Spring Framework 6.0 i Spring Boot 3.0, ich reperkusj\u0105, a tak\u017ce inicjatyw\u0105 im towarzysz\u0105cym, bo tych jest sporo.<\/p>\n\n\n\n<h2 id=\"kto-tak-naprawde-uzyje-nowego-springa\" data-num=1>Kto tak naprawd\u0119 u\u017cyje nowego Springa?<\/h2>\n\n\n\n<p>W przeci\u0105gu ostatniego tygodnia ukaza\u0142y si\u0119 nowe wersje obu najwi\u0119kszych projekt\u00f3w spod springowej parasolki &#8211; Spring Framework 6.0 oraz Spring Boot 3.0. I cho\u0107by nie wiem jak wiele zmian przynosi\u0142y same w sobie, to z pewno\u015bci\u0105 najwi\u0119ksz\u0105 rewolucj\u0105 jest porzucenie wsparcia starszych wersji Javy. I kiedy m\u00f3wi\u0119 tutaj &#8222;starsze&#8221;, na my\u015bli mam nie Jave 1.6, nawet nie Java 1.8 ale nawet&#8230; Jave 16. Nowy Spring do dzia\u0142ania wymaga Javy 17. Pivotal nie poszed\u0142 tutaj na \u017cadne kompromisy i nowego &#8222;majora&#8221; projekt\u00f3w przystosowa\u0142 do dzia\u0142ania wy\u0142\u0105cznie z najnowszym dost\u0119pnym w tej chwili wydaniem LTS.<\/p>\n\n\n\n<p>Ilu w teorii projekt\u00f3w b\u0119dzie w stanie si\u0119 na nowego Springa przepi\u0105\u0107? Sp\u00f3jrzmy na statystyki u\u017cycia Javy. Najnowszy raport opisuj\u0105cy ekosystem javowy, czyli wydany w kwietniu 2022 przez New Relic <a href=\"https:\/\/newrelic.com\/resources\/report\/2022-state-of-java-ecosystem\">2022 State of the Java Ecosystem Report<\/a> pokazywa\u0142 u\u017cycie Javy 17 na poziomie 0.37%. Na dane te trzeba patrze\u0107 jednak w kontek\u015bcie. Poprzedni LTS, czyli JDK 11, wyprzedzi\u0142 w raporcie bowiem kr\u00f3luj\u0105ce przez lata JDK 1.8 i osi\u0105gn\u0105\u0142 niemal 50% wysycenia rynku. Oznacza to, \u017ce proces migracji ma si\u0119 jak najlepiej, a \u017ce przej\u015bcie z JDK 11 na JDK 17 to naprawd\u0119 prosta sprawa (zw\u0142aszcza w por\u00f3wnaniu z doj\u015bciem do JDK 11, co swego czasu <a href=\"https:\/\/engineering.linkedin.com\/blog\/2022\/linkedin-s-journey-to-java-11\">zgrabnie opisa\u0142 LinkedIn<\/a>), to jedyne co stoi na przeszkodzie to danie potencjalnym u\u017cytkownikom argument, aby takowe zadanie dorzuci\u0107 do Sprintu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"498\" height=\"199\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/jack-sparrow-potc.gif\" alt=\"\" class=\"wp-image-12449\"\/><figcaption>Dlatego te\u017c trzeba si\u0119 zastanowi\u0107, czy Spring takie argumenty ma.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"glowne-danie-spring-framework-6-0\" data-num=2>G\u0142\u00f3wne danie: Spring Framework 6.0<\/h2>\n\n\n\n<p>Nie by\u0142oby tego tekstu (oraz wielu opisywanych tu premier), gdyby swojej premiery siedemnastego listopada nie mia\u0142 Spring Framework 6.0 &#8211; czyli nowe wydanie serca ca\u0142ego systemu. Przez lata to w\u0142a\u015bnie ono by\u0142o na nag\u0142\u00f3wkach, ostatnimi laty zosta\u0142o troch\u0119 przy\u0107mione przez Spring Boota, kt\u00f3ry wraz z popularno\u015bci\u0105 Mikroserwis\u00f3w sta\u0142 si\u0119 sztandarow\u0105 edycj\u0105 Springa. Niech Was jednak nie zwiedzie pozorne wycofanie si\u0119 w cie\u0144 &#8211; to w\u0142a\u015bnie Spring Framework jest t\u0105 cz\u0119\u015bci\u0105, gdzie zwykle dochodzi do tych najciekawszych z in\u017cynierskiego punktu widzenia zmian. Przejdziemy sobie przez te najbardziej spektakularne:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Papa Java EE, witaj Jakarta EE!<\/h3>\n\n\n\n<p>Nowa Java to jedno, ale Spring Framework 6.0 przynosi r\u00f3wnie\u017c now\u0105 Jakarte w wersji 9.1+. Warto o tym wiedzie\u0107, poniewa\u017c proces migracyjny mo\u017ce okaza\u0107 si\u0119 tutaj (co dla wielu b\u0119dzie pewnie zaskoczeniem) trudniejszy ni\u017c w wypadku Javy. Przypominam bowiem o tym, \u017ce Jakarta EE 9.1+ to ta edycja, kt\u00f3ra pozby\u0142a si\u0119 pakietu <code>javax.*<\/code> na rzecz <code>jakarta.*<\/code>, w ten spos\u00f3b uchodz\u0105c z zasi\u0119gu Oracle i nale\u017c\u0105cych do nich trademark\u00f3w. Dla Springa jest to olbrzymi skok, umo\u017cliwi bowiem kompatybilno\u015b\u0107 z kolejnymi, przynosz\u0105cymi wi\u0119cej warto\u015bci do ekosystemu wersjami Jakarty EE. Sami tw\u00f3rcy radz\u0105, \u017ce najlepiej przej\u015b\u0107 od razu na wydan\u0105 niedawno dziesi\u0105tk\u0119 &#8211; ta przynosi bowiem podbicie kilku istotnych standard\u00f3w.<\/p>\n\n\n\n<p>W zale\u017cno\u015bci od tego, jak bardzo Wasza aplikacja zale\u017ca\u0142a od Javy EE i zwi\u0105zanych z ni\u0105 bibliotek, tym trudniejsza b\u0119dzie migracja. Chyba, \u017ce u\u017cyjecie <a href=\"https:\/\/foojay.io\/today\/migrating-from-java-ee-to-jakarta-ee-with-intellij-idea\/\">narz\u0119dzia od JetBrains<\/a> &#8211; wtedy powinno by\u0107 sporo pro\u015bciej.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/i-suggest-you-start-cooperating-mr-mackey.gif\" alt=\"\" class=\"wp-image-12451\" width=\"220\" height=\"171\"\/><figcaption>Ciekawe, czy Spring planuje jakie\u015b wsparcie dla niedawno opublikowanego Core Profile?<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">Kompilacja Ahead-of-Time lub JPMS &#8211; wybierz jedno<\/h3>\n\n\n\n<p>Je\u015bli \u015bledzili\u015bcie wiadomo\u015bci o nowym Springu od jego pierwszych zapowiedzi, mam dla Was z\u0142\u0105 nowin\u0119: mie b\u0119dzie to jednak tak bogate wydanie, jak si\u0119&nbsp;zapowiada\u0142o \u2013 okazuje si\u0119 bowiem, \u017ce d\u0142ugo oczekiwane wsparcie JPMSa, systemu modu\u0142\u00f3w Javy, nie b\u0119dzie gotowe na premier\u0119. Jak przyznaj\u0105 tw\u00f3rcy, mo\u017cna si\u0119 spodziewa\u0107 jego pojawienia w p\u00f3\u017aniejszych wersjach, ale pierwsza wersja Spring Framework 6 skupia si\u0119 szczeg\u00f3lnie na wsparciu kompilacji Ahead-of-Time i GraalVM, a modu\u0142y utrudnia\u0142yby ten proces, komplikuj\u0105c tak zwan\u0105 \u201eanaliz\u0119 osi\u0105galno\u015bci\u201d. Nale\u017cy bowiem pami\u0119ta\u0107, \u017ce w odr\u00f3\u017cnieniu od nowych graczy na rynku framework\u00f3w jak Quarkus, Helidon czy Micronaut, Spring bardzo, bardzo mocno opiera si\u0119 na Reflection API. Dla niego wi\u0119c proces wsparcia dla GraalVM, kt\u00f3ry refleksji nie wspiera jest wi\u0119c znacznie trudniejszy.<\/p>\n\n\n\n<p>St\u0105d te\u017c modu\u0142y zesz\u0142y na dalszy plan, tw\u00f3rcy jasno bowiem pisz\u0105, \u017ce licz\u0105 tutaj na Project Leyden, maj\u0105cy ustandaryzowa\u0107 tworzenie kompilacji AoT na JVM. Jako \u017ce jest to cz\u0119\u015b\u0107 JDK, musi bra\u0107 JPMSa pod uwag\u0119, co powinno sprawi\u0107, \u017ce praca programist\u00f3w zewn\u0119trznych w tym aspekcie b\u0119dzie \u0142atwiejsza. Na ten moment Spring wybiera jednak wsparcie Natywnych Obraz\u00f3w. Je\u015bli za\u015b chcecie dowiedzie\u0107 si\u0119 wi\u0119cej o wsparciu samych Natywnych obraz\u00f3w i na co si\u0119 przek\u0142ada w kontek\u015bcie Springowym, odsy\u0142am Was do prezentacji <a href=\"https:\/\/www.youtube.com\/watch?v=TS4DpYSmfXk\">Ahead Of Time and Native in Spring Boot 3.0<\/a> autorstwa <a href=\"https:\/\/twitter.com\/snicoll\">St\u00e9phane Nicolla<\/a> i <a href=\"https:\/\/mamot.fr\/@bclozel\">Briana Clozela<\/a>.<\/p>\n\n\n\n<p>Wydaje mi si\u0119, \u017ce ca\u0142a sytuacja jest mocno symptomatyczna do wszystkiego, co dzieje si\u0119 z JPMS-em &#8211; nawet Frameworki, kt\u00f3re teoretycznie mog\u0142yby wprowadzi\u0107 modularyzacj\u0119 \u0142atwiej ni\u017c Spring nie do ko\u0144ca si\u0119 do tego kwapi\u0105. Na ten moment modu\u0142y zdaj\u0105 si\u0119 s\u0142u\u017cy\u0107 g\u0142\u00f3wnie tw\u00f3rcom JDK i&#8230; w tej formie sprawdzaj\u0105 si\u0119 \u015bwietnie, pozwalaj\u0105 bowiem na inkrementalny rozw\u00f3j ca\u0142ej platformy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"240\" height=\"173\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/NarrowEvenChinesecrocodilelizard-max-1mb.gif\" alt=\"\" class=\"wp-image-12472\"\/><figcaption>Do tematu AoT wr\u00f3cimy sobie jeszcze za chwil\u0119, przy okazji opisu nowo\u015bci w Spring Boot 3.0<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">Par\u0119 rzeczy pod mask\u0105<\/h3>\n\n\n\n<p>Dla kompletno\u015bci, nie mog\u0119 nie wspomnie\u0107 tutaj o dw\u00f3ch ciekawych zmianach pod mask\u0105. Ot\u00f3\u017c kolejn\u0105 rzecz\u0105, kt\u00f3rej tw\u00f3rcy Springa si\u0119 przygl\u0105daj\u0105, jest rozw\u00f3j wirtualnych w\u0105tk\u00f3w. Pocz\u0105tkiem pa\u017adziernika pojawi\u0142a si\u0119 <a href=\"https:\/\/spring.io\/blog\/2022\/10\/11\/embracing-virtual-threads\">do\u015b\u0107 obszerna publikacja<\/a>, kt\u00f3ra stanowi chyba pierwsze oficjalne stanowisko Springa w tej kwestii. Ponownie d\u0142ugie dziedzictwo frameworki k\u0142adzie si\u0119 tutaj cieniem \u2013 framework posiada du\u017ce ilo\u015bci blok\u00f3w synchronized, co cho\u0107 samo w sobie nie stanowi blokera, to jednak ca\u0142y proces troch\u0119 komplikuje. Tw\u00f3rcy zdaj\u0105 sobie z tego jednak spraw\u0119 i analizuj\u0105, kt\u00f3rymi fragmentami musz\u0105 zaj\u0105\u0107 si\u0119 w pierwszej kolejno\u015bci i eksperymentuj\u0105 z dostarczonymi przez JDK metodami, i tak naprawd\u0119 pierwsze refeaktoringi trafi\u0142y ju\u017c do wydanego Spring Framework 6.0. Jako spo\u0142eczno\u015b\u0107 powinno nas to podej\u015bcie cieszy\u0107. Mi\u0142o, \u017ce Springowi zale\u017cy na tym, aby realnie co\u015b na tych wirtualnych w\u0105tkach zyska\u0107, a nie tylko odhaczy\u0107 sobie kolejny \u201erewolucyjny\u201d feature.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"499\" height=\"261\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/31f.gif\" alt=\"\" class=\"wp-image-12455\"\/><figcaption>Ponownie, nowi gracze maj\u0105 o prostu \u0142atwiej ni\u017c wieloletni gigant.<\/figcaption><\/figure><\/div>\n\n\n<p>Ostatni\u0105 rzecz\u0105 w kontek\u015bcie Spring Framework 6.0 o kt\u00f3rej chcia\u0142bym wspomnie\u0107, to przymiarki do Project CRaC. Mo\u017ce on pozwoli\u0107 na wyeliminowanie jednej z najwi\u0119kszych i najcz\u0119\u015bciej wypominanych Springowi wad &#8211; jego d\u0142ugiemu czasowi uruchamiania. Na razie gotowe funkcjonalno\u015bci (nawet w Preview) jeszcze nie s\u0105 gotowe dla szerokich test\u00f3w, ale ju\u017c sam sneak peak, kt\u00f3ry mo\u017cemy zobaczy\u0107 w prezentacji [Java on CRaC: Superfast JVM Application Startup, wyg\u0142oszonej przez <a href=\"https:\/\/twitter.com\/speakjava\">Simona Rittera<\/a> na Devoxx Belgium](<a class=\"autolink\" href=\"https:\/\/www.youtube.com\/watch?v=bWmuqh6wHgE&amp;t=2500s\">https:\/\/www.youtube.com\/watch?v=bWmuqh6wHgE&amp;t=2500s<\/a>) zaostrza apetyt.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"347\" height=\"347\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-35.png\" alt=\"\" class=\"wp-image-12457\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-35.png 347w, https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-35-300x300.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-35-150x150.png 150w\" sizes=\"auto, (max-width: 347px) 100vw, 347px\" \/><figcaption>I dawajcie to szybko &#8211; moje featury lubi\u0119 jak steaki: krwiste.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"to-czego-realnie-bedziecie-uzywac-spring-boot-3-0\" data-num=3>To, czego realnie b\u0119dziecie u\u017cywa\u0107 &#8211; Spring Boot 3.0<\/h2>\n\n\n\n<p>Tak jak wspomina\u0142em, zak\u0142adam \u017ce spora ilo\u015b\u0107 z Was b\u0119dzie u\u017cywa\u0107 w\u0142a\u015bnie tej dystrybucji Springa. Dlatego, mimo \u017ce ju\u017c zahaczyli\u015bmy o temat AoT to w\u0142a\u015bnie przy okazji Spring Boota zastanowimy si\u0119, do czego tak naprawd\u0119 w praktyce si\u0119 to sprowadza. Dlatego trzeba odkurzy\u0107 stare zapowiedzi i przygl\u0105dn\u0105\u0107 si\u0119 projektowi, kt\u00f3ry nazywa si\u0119 Spring-Native.<\/p>\n\n\n\n<p>Kompilacja Ahead-of-Time o kt\u00f3rej to tak naprawd\u0119 nic innego, jak kompilowanie kodu \u017ar\u00f3d\u0142owego do wariantu finalnego nie poprzez krok po\u015bredni (bajtkod, a nast\u0119pnie kompilator Just-in-Time), ale na samym starcie procesu. Takie podej\u015bcie sprawia, \u017ce z g\u00f3ry mo\u017cna dokona\u0107 optymalizacji i wygenerowanie kodu maszynowego, przy okazji pozbawiaj\u0105c si\u0119 ca\u0142ego JVM-owego balastu, jak Classpath czy te\u017c sama maszyna wirtualna. Dzi\u0119ki temu aplikacje startuj\u0105 szybciej, po\u017ceraj\u0105 r\u00f3wnie\u017c mniej zasob\u00f3w &#8211; wynika to z faktu, \u017ce po prostu w uruchomionym procesie jest mniej niepotrzebnych klock\u00f3w.<\/p>\n\n\n\n<p>Nie jest to jednak za darmo &#8211; aplikacje kompilowane prze Graal VM (bo to w\u0142a\u015bnie on jest kompilatorem AoT o kt\u00f3rym ca\u0142y czas m\u00f3wimy) musz\u0105 dzia\u0142a\u0107 w ramach &#8222;za\u0142o\u017cenia zamkni\u0119tego \u015bwiata&#8221;. Oznacza ono, \u017ce ca\u0142y bytecode w aplikacji, kt\u00f3ry mo\u017ce by\u0107 wywo\u0142any w czasie pracy aplikacji, musi by\u0107 znany (obserwowany i analizowany) ju\u017c w czasie budowania. Szczeg\u00f3lnie mocno wp\u0142ywa to na programy u\u017cywaj\u0105ce mechanizmu refleksji. Kompilator bowiem musi domy\u015ble\u0107 si\u0119, jakie (zwykle dynamicznie) zasoby powinien do\u0142o\u017cy\u0107 do finalnego artefaktu, mimo \u017ce w kodzie nie ma do nich bezpo\u015brednich odwo\u0142a\u0144. Spring, jak wszyscy zdaj\u0105 sobie spraw\u0119 &#8211; jest bardzo mocno oparty o refleksj\u0119, dlatego prace s\u0142u\u017c\u0105ce do przystosowania go w\u0142a\u015bnie do dzia\u0142ania z GraalVM zosta\u0142y zapakowane w projekt R&amp;D o nazwie Spring-Native, kt\u00f3ry rozwijany jest od prawie trzech lat. Teraz finalnie staje si\u0119 on cz\u0119\u015bci\u0105 Springa, a najwi\u0119cej skorzysta na nim Spring Boot.<\/p>\n\n\n\n<p>Je\u015bli chcecie dowiedzie\u0107 si\u0119 wi\u0119cej o tym, jak dzia\u0142a GraalVM, zapraszam do <a href=\"https:\/\/spring.io\/blog\/2022\/03\/22\/initial-aot-support-in-spring-framework-6-0-0-m3\">artyku\u0142u napisanego w kontek\u015bcie Spring Framework<\/a>, ale r\u00f3wnie\u017c oficjalnego tekstu Oracle na temat <a href=\"https:\/\/docs.oracle.com\/en\/learn\/understanding-reflection-graalvm-native-image\/index.html#step-4-introducing-native-image-reflection-config\">natywnych obraz\u00f3w<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"364\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-12461\"\/><figcaption>GraalVM to bardzo z\u0142o\u017cony temat, wi\u0119c zanim zaczniecie eksperymentowa\u0107 sugeruje rzuci\u0107 okiem chocia\u017c na ten ostatni link.<\/figcaption><\/figure><\/div>\n\n\n<p>Co poza Spring-Native? Jednym z moich ulubionych dodatk\u00f3w do Spring Boota to ulepszonemu wsparciu dla Micrometer. Od pewnego czasu przygl\u0105dam si\u0119 rozwojowi tej biblioteki i jestem pewien, \u017ce na naszych oczach rodzi si\u0119 w\u0142a\u015bnie nowy standard, kt\u00f3ry zostanie z nami na lata. Objawia si\u0119 to cho\u0107by przez to, \u017ce coraz wi\u0119cej narz\u0119dzi zapewni\u0107 pr\u00f3buje dla niego jak najwygodniejsze wsparcie. Tak jak Quarkus porzuci\u0142 dla Micrometer rozwi\u0105zania pochodz\u0105ce z Jakarty EE, tak teraz w Spring Boot 3.0 r\u00f3wnie\u017c po\u0142o\u017cono nacisk na jak najwi\u0119ksz\u0105 kompatybilno\u015b\u0107. Przyk\u0142adowo, w nowej wersji frameworki Micrometer Tracing zast\u0105pi Spring Cloud Sleuth. Je\u017celi jeste\u015bcie ciekawi, jakie nowo\u015bci w tym aspekcie czekaj\u0105 u\u017cytkownik\u00f3w Spring Boot 3.0, zapraszam do artyku\u0142u <a href=\"https:\/\/spring.io\/blog\/2022\/10\/12\/observability-with-spring-boot-3\">Observability with Spring Boot 3<\/a><\/p>\n\n\n\n<p>To oczywi\u015bcie nie wszystkie nowo\u015bci &#8211; spore przemodelowanie przeszed\u0142 min. model properties\u00f3w aplikacji. te najwa\u017cniejsze znajdziecie w oficjalnym Release Note.<\/p>\n\n\n\n<h2 id=\"projekty-towarzyszace\" data-num=4>Projekty towarzysz\u0105ce<\/h2>\n\n\n\n<p>\u017beby zrozumie\u0107, jak wielk\u0105 zmian\u0105 by\u0142y poprawki wprowadzone przez Spring Framework 6.0 &#8211; kompilacja Ahead-of-Time, migracja do Jakarty EE 10, a tak\u017ce dodanie wsparcia dla Micrometer w Spring Boot &#8211; wystarczy spojrze\u0107 na release notes wi\u0119kszo\u015bci projekt\u00f3w towarzysz\u0105cych. Te dominowane s\u0105 bowiem przez raportowanie o kompatybilno\u015bci z najnowsz\u0105 wersj\u0105 projektu, spod kt\u00f3rej przebijaj\u0105 si\u0119 co najwy\u017cej drobne poprawki &#8211; pokazuje to, ile pracy ca\u0142ej spo\u0142eczno\u015bci by\u0142o wymagane, \u017ceby zrobi\u0107 du\u017cy krok do przodu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-37-953x1024.png\" alt=\"\" class=\"wp-image-12470\" width=\"477\" height=\"512\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-37-953x1024.png 953w, https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-37-279x300.png 279w, https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-37-768x825.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-37.png 987w\" sizes=\"auto, (max-width: 477px) 100vw, 477px\" \/><figcaption>Migracja na AoT &#8211; Obietnice vs Rzeczywisto\u015b\u0107<\/figcaption><\/figure><\/div>\n\n\n<p>Taki np. <a href=\"https:\/\/spring.io\/blog\/2022\/11\/21\/spring-web-services-4-0-0-is-now-ga\">Spring Web Service 4.0<\/a> nie chwali si\u0119 (poza powy\u017cszymi upgrade&#8217;ami) niczym poza przej\u015bciem na GitHuba je\u015bli chodzi o \u015bledzenie releas\u00f3w. <a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">Spring Security 6.0<\/a> te\u017c wprowadza raczej drobne dodatki. Troch\u0119 ciekawiej prezentuje si\u0119 to w wypadku <a href=\"https:\/\/spring.io\/blog\/2022\/11\/23\/spring-for-graphql-1-1-0-released\">Spring GraphQL 1.1.0<\/a>, <a href=\"https:\/\/spring.io\/blog\/2022\/11\/18\/spring-data-2022-0-goes-ga\">Spring Data 2022.0<\/a> czy nowych <a href=\"https:\/\/spring.io\/blog\/2022\/11\/21\/new-major-releases-of-spring-for-apache-kafka-and-spring-for-rabbitmq\">Spring for Apache Kafka 3.0 i Spring for RabbitMQ 3.0<\/a> &#8211; te zawieraj\u0105 troch\u0119 nowych API. Jednak nawet w ich przypadku gro zapowiedzi to jednak informacji o udanej migracji, nawet je\u015bli Spring Data mo\u017cna uzna\u0107 za wybijaj\u0105cy si\u0119 przypadek projektu, kt\u00f3ry realnie poinformowa\u0142, z czym ta ca\u0142a kompilacja AoT si\u0119 wi\u0105\u017ce.<\/p>\n\n\n\n<h2 id=\"mikroserwisy-zaczynaja-byc-passe-spring-modulith\" data-num=5>Mikroserwisy zaczynaj\u0105 by\u0107 passe &#8211; Spring Modulith<\/h2>\n\n\n\n<p>Przy okazji opisywania Spring Boota 3.0 wspomnia\u0142em, \u017ce to w\u0142a\u015bnie ta wersja b\u0119dzie prawdopodobnie docelow\u0105 dla wi\u0119kszo\u015bci u\u017cytkownik\u00f3w Springa (a przynajmniej tych, kt\u00f3rzy w og\u00f3le rozwa\u017caj\u0105 migracj\u0119 na jego now\u0105 aktualizacj\u0119). Spring Boot to w ko\u0144cu wydanie dedykowane cho\u0107by takim aplikacj\u0105 Cloud Native czy og\u00f3lnie poj\u0119tym Mikroserwisom. Ostatnimi laty (czy nawet w ci\u0105gu ostatniej dekady) to w\u0142a\u015bnie Mikroserwisy by\u0142y tym wzorcem architektonicznym, kt\u00f3ry sta\u0142 si\u0119 tym &#8222;nowoczesnym&#8221; sposobem tworzenia aplikacji, do poziomu, gdy mo\u017cna go uzna\u0107 za swoisty kult cargo, r\u00f3wnie\u017c w \u015bwiecie Javy. Tak d\u0142ugo walczyli\u015bmy, aby nasze frameworki nadawa\u0142y si\u0119 do tego typu architektur, \u017ce teraz traktujemy je jako rozwi\u0105zanie domy\u015blne.<\/p>\n\n\n\n<p>W spo\u0142eczno\u015bci jednak coraz cz\u0119\u015bciej pojawia nawo\u0142ywanie do powrotu do monolitu, ale troch\u0119 wymy\u015blonego na nowo. Zwolennicy tego podej\u015bcia nawo\u0142uj\u0105, \u017ce przy u\u017cyciu dzisiejszych narz\u0119dzi i dobrej modularyzacji jeste\u015bmy w stanie stworzy\u0107 codebase posiadaj\u0105cy spor\u0105 ilo\u015b\u0107 zalet mikroserwis\u00f3w przy zaskakuj\u0105co ma\u0142ej ilo\u015bci jego wad. Zainteresowanych odsy\u0142am do koncepcji <a href=\"https:\/\/m.signalvnoise.com\/the-majestic-monolith\/\">Majestatycznego Monolitu<\/a> autorstwa <a href=\"https:\/\/m.signalvnoise.com\/author\/dhh\/\">DHH<\/a>, a tak\u017ce interesuj\u0105cej serii <a href=\"https:\/\/www.kamilgrzybek.com\/design\/modular-monolith-primer\/\">Modular Monolith: A Primer<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"514\" height=\"256\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-36.png\" alt=\"\" class=\"wp-image-12466\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-36.png 514w, https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-36-300x149.png 300w\" sizes=\"auto, (max-width: 514px) 100vw, 514px\" \/><figcaption>Bo zaskakuj\u0105co cz\u0119sto, tak naprawd\u0119 i tak wychodzi nam po prostu rozproszony monolith<\/figcaption><\/figure><\/div>\n\n\n<p>No dobra, ale jak to si\u0119 ma do tematu Springa? Ot\u00f3\u017c wraz ze Spring Bootem swoj\u0105 premier\u0119 mia\u0142 projekt <a href=\"https:\/\/spring.io\/blog\/2022\/10\/21\/introducing-spring-modulith\">Spring Modulith w wersji 0.1<\/a>, kt\u00f3ry ma wprowadzi\u0107 Springa w er\u0119 majestatycznego monolitu. Spring-Modulith to rozwini\u0119cie istniej\u0105cego projektu <a href=\"https:\/\/github.com\/moduliths\/moduliths\">Moduliths<\/a> (kt\u00f3rego zast\u0105pi), ale jeszcze lepiej zintegrowanego z samym Springiem. Bardzo ciekawy jest sam spos\u00f3b dzia\u0142ania ca\u0142o\u015bci &#8211; zamiast mocno ingerowa\u0107 on w proces budowania, wykorzystuje do weryfikacji projektu testy integracyjne. Te odpalaj\u0105 ArchUnit &#8211; bibliotek\u0119, kt\u00f3rej celem jest w\u0142a\u015bnie weryfikacja zale\u017cno\u015bci mi\u0119dzy poszczeg\u00f3lnymi modu\u0142ami. Magia Modulitha polega jednak na tym, \u017ce dzi\u0119ki znanemu \u015brodowisku uruchomieniowemu (aplikacje Spring Boot 3.0) jest w stanie prekonfigurowa\u0107 ArchUnita &#8211; co te\u017c czyni. Dzi\u0119ki temu w \u0142atwy spos\u00f3b jeste\u015bmy w stanie przetestowa\u0107, czy jakie\u015b architektoniczne spaghetti nie przemkn\u0119\u0142o przez Code Review.<\/p>\n\n\n\n<p>Jako, \u017ce jak pisali\u015bmy wy\u017cej, Spring wycofa\u0142 si\u0119 (na razie) ze wsparcia JPMS-a, Modulith wydaje si\u0119 by\u0107 interesuj\u0105c\u0105, prost\u0105 alternatyw\u0105. Je\u017celi dodamy do tego fakt, \u017ce projekt jest w stanie automatycznie generowa\u0107 nam diagramy architektoniczne z \u017cywego kodu, warto si\u0119 projektem zainteresowa\u0107. W tym celu podrzucam dwa dodatkowe materia\u0142y &#8211; <a href=\"https:\/\/www.infoq.com\/news\/2022\/11\/spring-modulith-launch\/\">wywiad z tw\u00f3rc\u0105 projektu, Oliverem Drotbohmem, od InfoQ<\/a> oraz <a href=\"https:\/\/blog.frankel.ch\/spring-modulith-modularity-maturity\/\">tutorial od Nicolasa Fr\u00e4nkela<\/a>.<\/p>\n\n\n\n<h2 id=\"to-na-sam-koniec-jak-sie-zmigrowac\" data-num=6>To na sam koniec &#8211; jak si\u0119 zmigrowa\u0107?<\/h2>\n\n\n\n<p>No dobra, porozmawiali\u015bmy sobie o zmianach, jakie nowy Spring (traktuj\u0105c go jako ca\u0142okszta\u0142t) przyniesie i mam nadzieje, \u017ce pomimo pewnej ilo\u015bci pracy, jak\u0105 trzeba wykona\u0107, uda\u0142o mi si\u0119 Was zach\u0119ci\u0107 do spr\u00f3bowania. Wiadomo jednak, \u017ce w tak\u0105 przygod\u0119 najlepiej ruszy\u0107 przygotowanym.<\/p>\n\n\n\n<p>Tw\u00f3rcy Springa ju\u017c w maju <a href=\"https:\/\/spring.io\/blog\/2022\/05\/24\/preparing-for-spring-boot-3-0\">podrzucili troch\u0119 sugestii<\/a>, w jaki spos\u00f3b przystosowa\u0107 sw\u00f3j kod na Spring Boota 3.0 i je\u015bli rzeczywi\u015bcie to zrobili\u015bcie (podbili\u015bcie Jave, Jakarte, prze migrowali\u015bcie Propertiesy, pousuwali\u015bcie przestarza\u0142y kod) to jeste\u015bcie w zasadzie gotowi od razu zacz\u0105\u0107 si\u0119 bawi\u0107 ca\u0142o\u015bci\u0105. Je\u017celi jednak opr\u00f3cz tego, \u017ce chcecie po prostu podbi\u0107 wersje zale\u017cno\u015bci, to jeszcze chcecie maksymalnie wykorzysta\u0107 nowe mo\u017cliwo\u015bci frameworka (i Javy), koniecznie rzu\u0107cie okiem na artyku\u0142 <a href=\"https:\/\/vladmihalcea.com\/spring-6-migration\/\">The best way to do the Spring 6 migration<\/a> Vlada Mihalcea. Przeczytacie w nim, jak uzyska\u0107 najwi\u0119cej warto\u015bci z ca\u0142ego procesu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/7594c85d89ea3e5fe7fab1000512330e.jpg\" alt=\"\"\/><figcaption>To co, powodzenia!<\/figcaption><\/figure><\/div>","protected":false},"excerpt":{"rendered":"<p>Dzisiaj temat wydania m\u00f3g\u0142 by\u0107 tylko jeden &#8211; Spring. A \u017ce w temacie najpopularniejszego frameworku JVM wydarzy\u0142o si\u0119 ostatnio bardzo wiele, po\u015bwi\u0119ci\u0142em mu ca\u0142\u0105 edycj\u0119. <\/p>\n","protected":false},"author":10,"featured_media":12479,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-12448","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm"],"acf":{"estimated_reading_time":"13","feature_image_blog":{"ID":12481,"id":12481,"title":"progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28","filename":"progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28.webp","filesize":336814,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28.webp","link":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28\/","alt":"","author":"10","description":"","caption":"","name":"progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28","status":"inherit","uploaded_to":12448,"date":"2022-11-24 12:41:25","modified":"2022-11-24 12:41:25","menu_order":0,"mime_type":"image\/webp","type":"image","subtype":"webp","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1024,"height":1024,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28-150x150.webp","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28-300x300.webp","medium-width":300,"medium-height":300,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28-768x768.webp","medium_large-width":768,"medium_large-height":768,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28-1024x1024.webp","large-width":1024,"large-height":1024,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28.webp","1536x1536-width":1024,"1536x1536-height":1024,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28.webp","2048x2048-width":1024,"2048x2048-height":1024,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28.webp","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":300,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28.webp","gform-image-choice-md-width":400,"gform-image-choice-md-height":400,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/progress_image_80_17591f09-7890-4112-9403-9eaef5f1ff28.webp","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":600}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Nowa era Springa - Spring Framework 6.0, Spring Boot 3.0, Spring Modulith - JVM Weekly #114 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nowa era Springa - Spring Framework 6.0, Spring Boot 3.0, Spring Modulith - JVM Weekly #114 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj temat wydania m\u00f3g\u0142 by\u0107 tylko jeden - Spring. A \u017ce w temacie najpopularniejszego frameworku JVM wydarzy\u0142o si\u0119 ostatnio bardzo wiele, po\u015bwi\u0119ci\u0142em mu ca\u0142\u0105 edycj\u0119.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-24T12:41:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-24T12:43:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Nowa era Springa &#8211; Spring Framework 6.0, Spring Boot 3.0, Spring Modulith &#8211; JVM Weekly #114\",\"datePublished\":\"2022-11-24T12:41:48+00:00\",\"dateModified\":\"2022-11-24T12:43:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/\"},\"wordCount\":2694,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/\",\"url\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/\",\"name\":\"Nowa era Springa - Spring Framework 6.0, Spring Boot 3.0, Spring Modulith - JVM Weekly #114 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png\",\"datePublished\":\"2022-11-24T12:41:48+00:00\",\"dateModified\":\"2022-11-24T12:43:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nowa era Springa &#8211; Spring Framework 6.0, Spring Boot 3.0, Spring Modulith &#8211; JVM Weekly #114\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Nowa era Springa - Spring Framework 6.0, Spring Boot 3.0, Spring Modulith - JVM Weekly #114 - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/","og_locale":"pl_PL","og_type":"article","og_title":"Nowa era Springa - Spring Framework 6.0, Spring Boot 3.0, Spring Modulith - JVM Weekly #114 - Vived","og_description":"Dzisiaj temat wydania m\u00f3g\u0142 by\u0107 tylko jeden - Spring. A \u017ce w temacie najpopularniejszego frameworku JVM wydarzy\u0142o si\u0119 ostatnio bardzo wiele, po\u015bwi\u0119ci\u0142em mu ca\u0142\u0105 edycj\u0119.","og_url":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/","og_site_name":"Vived","article_published_time":"2022-11-24T12:41:48+00:00","article_modified_time":"2022-11-24T12:43:38+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Nowa era Springa &#8211; Spring Framework 6.0, Spring Boot 3.0, Spring Modulith &#8211; JVM Weekly #114","datePublished":"2022-11-24T12:41:48+00:00","dateModified":"2022-11-24T12:43:38+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/"},"wordCount":2694,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/","url":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/","name":"Nowa era Springa - Spring Framework 6.0, Spring Boot 3.0, Spring Modulith - JVM Weekly #114 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png","datePublished":"2022-11-24T12:41:48+00:00","dateModified":"2022-11-24T12:43:38+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/JVM-Weekly-1200x628_V2-1-7.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/nowa-era-springa-spring-framerowk-6-0-spring-boot-3-0-spring-modulith-jvm-weekly-114\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Nowa era Springa &#8211; Spring Framework 6.0, Spring Boot 3.0, Spring Modulith &#8211; JVM Weekly #114"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/image","attrs":{"align":"center","id":12476,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-38.png\" alt=\"\" class=\"wp-image-12476\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-38.png\" alt=\"\" class=\"wp-image-12476\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wbrew temu, co si\u0119 przyj\u0119\u0142o, \u015bwiat Javy jest ostatnimi laty ca\u0142kiem dynamiczny. Pojawia si\u0119 spora ilo\u015b\u0107 nowych inicjatyw, framework\u00f3w czy zmianach w standardach - na tyle du\u017co, by zracjonalizowa\u0107 pojawianie si\u0119 cotygodniowego przegl\u0105du. Prawd\u0105 jednak jest, \u017ce cho\u0107 ta proporcja nieco si\u0119 ostatnimi latami zmienia, to jednak w tym \u015bwiecie dalej dzieli i rz\u0105dzi Spring - i mowa tutaj zar\u00f3wno o starszych projektach, jak i o nowych inicjatywach. Dlatego te\u017c, cho\u0107 mo\u017cemy si\u0119 cieszy\u0107 z tego, jak inne frameworki czy biblioteki pchaj\u0105 ekosystem do przodu, tak ju\u017c szeroko poj\u0119ta adopcja standard\u00f3w jak GraalVM czy JPMS zale\u017cy od Kr\u00f3la. A \u017ce ostatnie tygodnie to masa wa\u017cnych og\u0142osze\u0144 od Springa, to dzisiejsz\u0105 edycj\u0119 po\u015bwi\u0119cimy w\u0142a\u015bnie jemu. Przygl\u0105dniemy si\u0119 premierze Spring Framework 6.0 i Spring Boot 3.0, ich reperkusj\u0105, a tak\u017ce inicjatyw\u0105 im towarzysz\u0105cym, bo tych jest sporo.<\/p>\n","innerContent":["\n<p>Wbrew temu, co si\u0119 przyj\u0119\u0142o, \u015bwiat Javy jest ostatnimi laty ca\u0142kiem dynamiczny. Pojawia si\u0119 spora ilo\u015b\u0107 nowych inicjatyw, framework\u00f3w czy zmianach w standardach - na tyle du\u017co, by zracjonalizowa\u0107 pojawianie si\u0119 cotygodniowego przegl\u0105du. Prawd\u0105 jednak jest, \u017ce cho\u0107 ta proporcja nieco si\u0119 ostatnimi latami zmienia, to jednak w tym \u015bwiecie dalej dzieli i rz\u0105dzi Spring - i mowa tutaj zar\u00f3wno o starszych projektach, jak i o nowych inicjatywach. Dlatego te\u017c, cho\u0107 mo\u017cemy si\u0119 cieszy\u0107 z tego, jak inne frameworki czy biblioteki pchaj\u0105 ekosystem do przodu, tak ju\u017c szeroko poj\u0119ta adopcja standard\u00f3w jak GraalVM czy JPMS zale\u017cy od Kr\u00f3la. A \u017ce ostatnie tygodnie to masa wa\u017cnych og\u0142osze\u0144 od Springa, to dzisiejsz\u0105 edycj\u0119 po\u015bwi\u0119cimy w\u0142a\u015bnie jemu. Przygl\u0105dniemy si\u0119 premierze Spring Framework 6.0 i Spring Boot 3.0, ich reperkusj\u0105, a tak\u017ce inicjatyw\u0105 im towarzysz\u0105cym, bo tych jest sporo.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Kto tak naprawd\u0119 u\u017cyje nowego Springa?<\/h2>\n","innerContent":["\n<h2>Kto tak naprawd\u0119 u\u017cyje nowego Springa?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W przeci\u0105gu ostatniego tygodnia ukaza\u0142y si\u0119 nowe wersje obu najwi\u0119kszych projekt\u00f3w spod springowej parasolki - Spring Framework 6.0 oraz Spring Boot 3.0. I cho\u0107by nie wiem jak wiele zmian przynosi\u0142y same w sobie, to z pewno\u015bci\u0105 najwi\u0119ksz\u0105 rewolucj\u0105 jest porzucenie wsparcia starszych wersji Javy. I kiedy m\u00f3wi\u0119 tutaj \"starsze\", na my\u015bli mam nie Jave 1.6, nawet nie Java 1.8 ale nawet... Jave 16. Nowy Spring do dzia\u0142ania wymaga Javy 17. Pivotal nie poszed\u0142 tutaj na \u017cadne kompromisy i nowego \"majora\" projekt\u00f3w przystosowa\u0142 do dzia\u0142ania wy\u0142\u0105cznie z najnowszym dost\u0119pnym w tej chwili wydaniem LTS.<\/p>\n","innerContent":["\n<p>W przeci\u0105gu ostatniego tygodnia ukaza\u0142y si\u0119 nowe wersje obu najwi\u0119kszych projekt\u00f3w spod springowej parasolki - Spring Framework 6.0 oraz Spring Boot 3.0. I cho\u0107by nie wiem jak wiele zmian przynosi\u0142y same w sobie, to z pewno\u015bci\u0105 najwi\u0119ksz\u0105 rewolucj\u0105 jest porzucenie wsparcia starszych wersji Javy. I kiedy m\u00f3wi\u0119 tutaj \"starsze\", na my\u015bli mam nie Jave 1.6, nawet nie Java 1.8 ale nawet... Jave 16. Nowy Spring do dzia\u0142ania wymaga Javy 17. Pivotal nie poszed\u0142 tutaj na \u017cadne kompromisy i nowego \"majora\" projekt\u00f3w przystosowa\u0142 do dzia\u0142ania wy\u0142\u0105cznie z najnowszym dost\u0119pnym w tej chwili wydaniem LTS.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ilu w teorii projekt\u00f3w b\u0119dzie w stanie si\u0119 na nowego Springa przepi\u0105\u0107? Sp\u00f3jrzmy na statystyki u\u017cycia Javy. Najnowszy raport opisuj\u0105cy ekosystem javowy, czyli wydany w kwietniu 2022 przez New Relic <a href=\"https:\/\/newrelic.com\/resources\/report\/2022-state-of-java-ecosystem\">2022 State of the Java Ecosystem Report<\/a> pokazywa\u0142 u\u017cycie Javy 17 na poziomie 0.37%. Na dane te trzeba patrze\u0107 jednak w kontek\u015bcie. Poprzedni LTS, czyli JDK 11, wyprzedzi\u0142 w raporcie bowiem kr\u00f3luj\u0105ce przez lata JDK 1.8 i osi\u0105gn\u0105\u0142 niemal 50% wysycenia rynku. Oznacza to, \u017ce proces migracji ma si\u0119 jak najlepiej, a \u017ce przej\u015bcie z JDK 11 na JDK 17 to naprawd\u0119 prosta sprawa (zw\u0142aszcza w por\u00f3wnaniu z doj\u015bciem do JDK 11, co swego czasu <a href=\"https:\/\/engineering.linkedin.com\/blog\/2022\/linkedin-s-journey-to-java-11\">zgrabnie opisa\u0142 LinkedIn<\/a>), to jedyne co stoi na przeszkodzie to danie potencjalnym u\u017cytkownikom argument, aby takowe zadanie dorzuci\u0107 do Sprintu.<\/p>\n","innerContent":["\n<p>Ilu w teorii projekt\u00f3w b\u0119dzie w stanie si\u0119 na nowego Springa przepi\u0105\u0107? Sp\u00f3jrzmy na statystyki u\u017cycia Javy. Najnowszy raport opisuj\u0105cy ekosystem javowy, czyli wydany w kwietniu 2022 przez New Relic <a href=\"https:\/\/newrelic.com\/resources\/report\/2022-state-of-java-ecosystem\">2022 State of the Java Ecosystem Report<\/a> pokazywa\u0142 u\u017cycie Javy 17 na poziomie 0.37%. Na dane te trzeba patrze\u0107 jednak w kontek\u015bcie. Poprzedni LTS, czyli JDK 11, wyprzedzi\u0142 w raporcie bowiem kr\u00f3luj\u0105ce przez lata JDK 1.8 i osi\u0105gn\u0105\u0142 niemal 50% wysycenia rynku. Oznacza to, \u017ce proces migracji ma si\u0119 jak najlepiej, a \u017ce przej\u015bcie z JDK 11 na JDK 17 to naprawd\u0119 prosta sprawa (zw\u0142aszcza w por\u00f3wnaniu z doj\u015bciem do JDK 11, co swego czasu <a href=\"https:\/\/engineering.linkedin.com\/blog\/2022\/linkedin-s-journey-to-java-11\">zgrabnie opisa\u0142 LinkedIn<\/a>), to jedyne co stoi na przeszkodzie to danie potencjalnym u\u017cytkownikom argument, aby takowe zadanie dorzuci\u0107 do Sprintu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":12449,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/jack-sparrow-potc.gif\" alt=\"\" class=\"wp-image-12449\"\/><figcaption>Dlatego te\u017c trzeba si\u0119 zastanowi\u0107, czy Spring takie argumenty ma.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/jack-sparrow-potc.gif\" alt=\"\" class=\"wp-image-12449\"\/><figcaption>Dlatego te\u017c trzeba si\u0119 zastanowi\u0107, czy Spring takie argumenty ma.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>G\u0142\u00f3wne danie: Spring Framework 6.0<\/h2>\n","innerContent":["\n<h2>G\u0142\u00f3wne danie: Spring Framework 6.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie by\u0142oby tego tekstu (oraz wielu opisywanych tu premier), gdyby swojej premiery siedemnastego listopada nie mia\u0142 Spring Framework 6.0 - czyli nowe wydanie serca ca\u0142ego systemu. Przez lata to w\u0142a\u015bnie ono by\u0142o na nag\u0142\u00f3wkach, ostatnimi laty zosta\u0142o troch\u0119 przy\u0107mione przez Spring Boota, kt\u00f3ry wraz z popularno\u015bci\u0105 Mikroserwis\u00f3w sta\u0142 si\u0119 sztandarow\u0105 edycj\u0105 Springa. Niech Was jednak nie zwiedzie pozorne wycofanie si\u0119 w cie\u0144 - to w\u0142a\u015bnie Spring Framework jest t\u0105 cz\u0119\u015bci\u0105, gdzie zwykle dochodzi do tych najciekawszych z in\u017cynierskiego punktu widzenia zmian. Przejdziemy sobie przez te najbardziej spektakularne:<\/p>\n","innerContent":["\n<p>Nie by\u0142oby tego tekstu (oraz wielu opisywanych tu premier), gdyby swojej premiery siedemnastego listopada nie mia\u0142 Spring Framework 6.0 - czyli nowe wydanie serca ca\u0142ego systemu. Przez lata to w\u0142a\u015bnie ono by\u0142o na nag\u0142\u00f3wkach, ostatnimi laty zosta\u0142o troch\u0119 przy\u0107mione przez Spring Boota, kt\u00f3ry wraz z popularno\u015bci\u0105 Mikroserwis\u00f3w sta\u0142 si\u0119 sztandarow\u0105 edycj\u0105 Springa. Niech Was jednak nie zwiedzie pozorne wycofanie si\u0119 w cie\u0144 - to w\u0142a\u015bnie Spring Framework jest t\u0105 cz\u0119\u015bci\u0105, gdzie zwykle dochodzi do tych najciekawszych z in\u017cynierskiego punktu widzenia zmian. Przejdziemy sobie przez te najbardziej spektakularne:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Papa Java EE, witaj Jakarta EE!<\/h3>\n","innerContent":["\n<h3>Papa Java EE, witaj Jakarta EE!<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nowa Java to jedno, ale Spring Framework 6.0 przynosi r\u00f3wnie\u017c now\u0105 Jakarte w wersji 9.1+. Warto o tym wiedzie\u0107, poniewa\u017c proces migracyjny mo\u017ce okaza\u0107 si\u0119 tutaj (co dla wielu b\u0119dzie pewnie zaskoczeniem) trudniejszy ni\u017c w wypadku Javy. Przypominam bowiem o tym, \u017ce Jakarta EE 9.1+ to ta edycja, kt\u00f3ra pozby\u0142a si\u0119 pakietu <code>javax.*<\/code> na rzecz <code>jakarta.*<\/code>, w ten spos\u00f3b uchodz\u0105c z zasi\u0119gu Oracle i nale\u017c\u0105cych do nich trademark\u00f3w. Dla Springa jest to olbrzymi skok, umo\u017cliwi bowiem kompatybilno\u015b\u0107 z kolejnymi, przynosz\u0105cymi wi\u0119cej warto\u015bci do ekosystemu wersjami Jakarty EE. Sami tw\u00f3rcy radz\u0105, \u017ce najlepiej przej\u015b\u0107 od razu na wydan\u0105 niedawno dziesi\u0105tk\u0119 - ta przynosi bowiem podbicie kilku istotnych standard\u00f3w.<\/p>\n","innerContent":["\n<p>Nowa Java to jedno, ale Spring Framework 6.0 przynosi r\u00f3wnie\u017c now\u0105 Jakarte w wersji 9.1+. Warto o tym wiedzie\u0107, poniewa\u017c proces migracyjny mo\u017ce okaza\u0107 si\u0119 tutaj (co dla wielu b\u0119dzie pewnie zaskoczeniem) trudniejszy ni\u017c w wypadku Javy. Przypominam bowiem o tym, \u017ce Jakarta EE 9.1+ to ta edycja, kt\u00f3ra pozby\u0142a si\u0119 pakietu <code>javax.*<\/code> na rzecz <code>jakarta.*<\/code>, w ten spos\u00f3b uchodz\u0105c z zasi\u0119gu Oracle i nale\u017c\u0105cych do nich trademark\u00f3w. Dla Springa jest to olbrzymi skok, umo\u017cliwi bowiem kompatybilno\u015b\u0107 z kolejnymi, przynosz\u0105cymi wi\u0119cej warto\u015bci do ekosystemu wersjami Jakarty EE. Sami tw\u00f3rcy radz\u0105, \u017ce najlepiej przej\u015b\u0107 od razu na wydan\u0105 niedawno dziesi\u0105tk\u0119 - ta przynosi bowiem podbicie kilku istotnych standard\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W zale\u017cno\u015bci od tego, jak bardzo Wasza aplikacja zale\u017ca\u0142a od Javy EE i zwi\u0105zanych z ni\u0105 bibliotek, tym trudniejsza b\u0119dzie migracja. Chyba, \u017ce u\u017cyjecie <a href=\"https:\/\/foojay.io\/today\/migrating-from-java-ee-to-jakarta-ee-with-intellij-idea\/\">narz\u0119dzia od JetBrains<\/a> - wtedy powinno by\u0107 sporo pro\u015bciej.<\/p>\n","innerContent":["\n<p>W zale\u017cno\u015bci od tego, jak bardzo Wasza aplikacja zale\u017ca\u0142a od Javy EE i zwi\u0105zanych z ni\u0105 bibliotek, tym trudniejsza b\u0119dzie migracja. Chyba, \u017ce u\u017cyjecie <a href=\"https:\/\/foojay.io\/today\/migrating-from-java-ee-to-jakarta-ee-with-intellij-idea\/\">narz\u0119dzia od JetBrains<\/a> - wtedy powinno by\u0107 sporo pro\u015bciej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":12451,"width":220,"height":171,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/i-suggest-you-start-cooperating-mr-mackey.gif\" alt=\"\" class=\"wp-image-12451\" width=\"220\" height=\"171\"\/><figcaption>Ciekawe, czy Spring planuje jakie\u015b wsparcie dla niedawno opublikowanego Core Profile?<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/i-suggest-you-start-cooperating-mr-mackey.gif\" alt=\"\" class=\"wp-image-12451\" width=\"220\" height=\"171\"\/><figcaption>Ciekawe, czy Spring planuje jakie\u015b wsparcie dla niedawno opublikowanego Core Profile?<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Kompilacja Ahead-of-Time lub JPMS - wybierz jedno<\/h3>\n","innerContent":["\n<h3>Kompilacja Ahead-of-Time lub JPMS - wybierz jedno<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli \u015bledzili\u015bcie wiadomo\u015bci o nowym Springu od jego pierwszych zapowiedzi, mam dla Was z\u0142\u0105 nowin\u0119: mie b\u0119dzie to jednak tak bogate wydanie, jak si\u0119&nbsp;zapowiada\u0142o \u2013 okazuje si\u0119 bowiem, \u017ce d\u0142ugo oczekiwane wsparcie JPMSa, systemu modu\u0142\u00f3w Javy, nie b\u0119dzie gotowe na premier\u0119. Jak przyznaj\u0105 tw\u00f3rcy, mo\u017cna si\u0119 spodziewa\u0107 jego pojawienia w p\u00f3\u017aniejszych wersjach, ale pierwsza wersja Spring Framework 6 skupia si\u0119 szczeg\u00f3lnie na wsparciu kompilacji Ahead-of-Time i GraalVM, a modu\u0142y utrudnia\u0142yby ten proces, komplikuj\u0105c tak zwan\u0105 \u201eanaliz\u0119 osi\u0105galno\u015bci\u201d. Nale\u017cy bowiem pami\u0119ta\u0107, \u017ce w odr\u00f3\u017cnieniu od nowych graczy na rynku framework\u00f3w jak Quarkus, Helidon czy Micronaut, Spring bardzo, bardzo mocno opiera si\u0119 na Reflection API. Dla niego wi\u0119c proces wsparcia dla GraalVM, kt\u00f3ry refleksji nie wspiera jest wi\u0119c znacznie trudniejszy.<\/p>\n","innerContent":["\n<p>Je\u015bli \u015bledzili\u015bcie wiadomo\u015bci o nowym Springu od jego pierwszych zapowiedzi, mam dla Was z\u0142\u0105 nowin\u0119: mie b\u0119dzie to jednak tak bogate wydanie, jak si\u0119&nbsp;zapowiada\u0142o \u2013 okazuje si\u0119 bowiem, \u017ce d\u0142ugo oczekiwane wsparcie JPMSa, systemu modu\u0142\u00f3w Javy, nie b\u0119dzie gotowe na premier\u0119. Jak przyznaj\u0105 tw\u00f3rcy, mo\u017cna si\u0119 spodziewa\u0107 jego pojawienia w p\u00f3\u017aniejszych wersjach, ale pierwsza wersja Spring Framework 6 skupia si\u0119 szczeg\u00f3lnie na wsparciu kompilacji Ahead-of-Time i GraalVM, a modu\u0142y utrudnia\u0142yby ten proces, komplikuj\u0105c tak zwan\u0105 \u201eanaliz\u0119 osi\u0105galno\u015bci\u201d. Nale\u017cy bowiem pami\u0119ta\u0107, \u017ce w odr\u00f3\u017cnieniu od nowych graczy na rynku framework\u00f3w jak Quarkus, Helidon czy Micronaut, Spring bardzo, bardzo mocno opiera si\u0119 na Reflection API. Dla niego wi\u0119c proces wsparcia dla GraalVM, kt\u00f3ry refleksji nie wspiera jest wi\u0119c znacznie trudniejszy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>St\u0105d te\u017c modu\u0142y zesz\u0142y na dalszy plan, tw\u00f3rcy jasno bowiem pisz\u0105, \u017ce licz\u0105 tutaj na Project Leyden, maj\u0105cy ustandaryzowa\u0107 tworzenie kompilacji AoT na JVM. Jako \u017ce jest to cz\u0119\u015b\u0107 JDK, musi bra\u0107 JPMSa pod uwag\u0119, co powinno sprawi\u0107, \u017ce praca programist\u00f3w zewn\u0119trznych w tym aspekcie b\u0119dzie \u0142atwiejsza. Na ten moment Spring wybiera jednak wsparcie Natywnych Obraz\u00f3w. Je\u015bli za\u015b chcecie dowiedzie\u0107 si\u0119 wi\u0119cej o wsparciu samych Natywnych obraz\u00f3w i na co si\u0119 przek\u0142ada w kontek\u015bcie Springowym, odsy\u0142am Was do prezentacji <a href=\"https:\/\/www.youtube.com\/watch?v=TS4DpYSmfXk\">Ahead Of Time and Native in Spring Boot 3.0<\/a> autorstwa <a href=\"https:\/\/twitter.com\/snicoll\">St\u00e9phane Nicolla<\/a> i <a href=\"https:\/\/mamot.fr\/@bclozel\">Briana Clozela<\/a>.<\/p>\n","innerContent":["\n<p>St\u0105d te\u017c modu\u0142y zesz\u0142y na dalszy plan, tw\u00f3rcy jasno bowiem pisz\u0105, \u017ce licz\u0105 tutaj na Project Leyden, maj\u0105cy ustandaryzowa\u0107 tworzenie kompilacji AoT na JVM. Jako \u017ce jest to cz\u0119\u015b\u0107 JDK, musi bra\u0107 JPMSa pod uwag\u0119, co powinno sprawi\u0107, \u017ce praca programist\u00f3w zewn\u0119trznych w tym aspekcie b\u0119dzie \u0142atwiejsza. Na ten moment Spring wybiera jednak wsparcie Natywnych Obraz\u00f3w. Je\u015bli za\u015b chcecie dowiedzie\u0107 si\u0119 wi\u0119cej o wsparciu samych Natywnych obraz\u00f3w i na co si\u0119 przek\u0142ada w kontek\u015bcie Springowym, odsy\u0142am Was do prezentacji <a href=\"https:\/\/www.youtube.com\/watch?v=TS4DpYSmfXk\">Ahead Of Time and Native in Spring Boot 3.0<\/a> autorstwa <a href=\"https:\/\/twitter.com\/snicoll\">St\u00e9phane Nicolla<\/a> i <a href=\"https:\/\/mamot.fr\/@bclozel\">Briana Clozela<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydaje mi si\u0119, \u017ce ca\u0142a sytuacja jest mocno symptomatyczna do wszystkiego, co dzieje si\u0119 z JPMS-em - nawet Frameworki, kt\u00f3re teoretycznie mog\u0142yby wprowadzi\u0107 modularyzacj\u0119 \u0142atwiej ni\u017c Spring nie do ko\u0144ca si\u0119 do tego kwapi\u0105. Na ten moment modu\u0142y zdaj\u0105 si\u0119 s\u0142u\u017cy\u0107 g\u0142\u00f3wnie tw\u00f3rcom JDK i... w tej formie sprawdzaj\u0105 si\u0119 \u015bwietnie, pozwalaj\u0105 bowiem na inkrementalny rozw\u00f3j ca\u0142ej platformy.<\/p>\n","innerContent":["\n<p>Wydaje mi si\u0119, \u017ce ca\u0142a sytuacja jest mocno symptomatyczna do wszystkiego, co dzieje si\u0119 z JPMS-em - nawet Frameworki, kt\u00f3re teoretycznie mog\u0142yby wprowadzi\u0107 modularyzacj\u0119 \u0142atwiej ni\u017c Spring nie do ko\u0144ca si\u0119 do tego kwapi\u0105. Na ten moment modu\u0142y zdaj\u0105 si\u0119 s\u0142u\u017cy\u0107 g\u0142\u00f3wnie tw\u00f3rcom JDK i... w tej formie sprawdzaj\u0105 si\u0119 \u015bwietnie, pozwalaj\u0105 bowiem na inkrementalny rozw\u00f3j ca\u0142ej platformy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":12472,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/NarrowEvenChinesecrocodilelizard-max-1mb.gif\" alt=\"\" class=\"wp-image-12472\"\/><figcaption>Do tematu AoT wr\u00f3cimy sobie jeszcze za chwil\u0119, przy okazji opisu nowo\u015bci w Spring Boot 3.0<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/NarrowEvenChinesecrocodilelizard-max-1mb.gif\" alt=\"\" class=\"wp-image-12472\"\/><figcaption>Do tematu AoT wr\u00f3cimy sobie jeszcze za chwil\u0119, przy okazji opisu nowo\u015bci w Spring Boot 3.0<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Par\u0119 rzeczy pod mask\u0105<\/h3>\n","innerContent":["\n<h3>Par\u0119 rzeczy pod mask\u0105<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dla kompletno\u015bci, nie mog\u0119 nie wspomnie\u0107 tutaj o dw\u00f3ch ciekawych zmianach pod mask\u0105. Ot\u00f3\u017c kolejn\u0105 rzecz\u0105, kt\u00f3rej tw\u00f3rcy Springa si\u0119 przygl\u0105daj\u0105, jest rozw\u00f3j wirtualnych w\u0105tk\u00f3w. Pocz\u0105tkiem pa\u017adziernika pojawi\u0142a si\u0119 <a href=\"https:\/\/spring.io\/blog\/2022\/10\/11\/embracing-virtual-threads\">do\u015b\u0107 obszerna publikacja<\/a>, kt\u00f3ra stanowi chyba pierwsze oficjalne stanowisko Springa w tej kwestii. Ponownie d\u0142ugie dziedzictwo frameworki k\u0142adzie si\u0119 tutaj cieniem \u2013 framework posiada du\u017ce ilo\u015bci blok\u00f3w synchronized, co cho\u0107 samo w sobie nie stanowi blokera, to jednak ca\u0142y proces troch\u0119 komplikuje. Tw\u00f3rcy zdaj\u0105 sobie z tego jednak spraw\u0119 i analizuj\u0105, kt\u00f3rymi fragmentami musz\u0105 zaj\u0105\u0107 si\u0119 w pierwszej kolejno\u015bci i eksperymentuj\u0105 z dostarczonymi przez JDK metodami, i tak naprawd\u0119 pierwsze refeaktoringi trafi\u0142y ju\u017c do wydanego Spring Framework 6.0. Jako spo\u0142eczno\u015b\u0107 powinno nas to podej\u015bcie cieszy\u0107. Mi\u0142o, \u017ce Springowi zale\u017cy na tym, aby realnie co\u015b na tych wirtualnych w\u0105tkach zyska\u0107, a nie tylko odhaczy\u0107 sobie kolejny \u201erewolucyjny\u201d feature.<\/p>\n","innerContent":["\n<p>Dla kompletno\u015bci, nie mog\u0119 nie wspomnie\u0107 tutaj o dw\u00f3ch ciekawych zmianach pod mask\u0105. Ot\u00f3\u017c kolejn\u0105 rzecz\u0105, kt\u00f3rej tw\u00f3rcy Springa si\u0119 przygl\u0105daj\u0105, jest rozw\u00f3j wirtualnych w\u0105tk\u00f3w. Pocz\u0105tkiem pa\u017adziernika pojawi\u0142a si\u0119 <a href=\"https:\/\/spring.io\/blog\/2022\/10\/11\/embracing-virtual-threads\">do\u015b\u0107 obszerna publikacja<\/a>, kt\u00f3ra stanowi chyba pierwsze oficjalne stanowisko Springa w tej kwestii. Ponownie d\u0142ugie dziedzictwo frameworki k\u0142adzie si\u0119 tutaj cieniem \u2013 framework posiada du\u017ce ilo\u015bci blok\u00f3w synchronized, co cho\u0107 samo w sobie nie stanowi blokera, to jednak ca\u0142y proces troch\u0119 komplikuje. Tw\u00f3rcy zdaj\u0105 sobie z tego jednak spraw\u0119 i analizuj\u0105, kt\u00f3rymi fragmentami musz\u0105 zaj\u0105\u0107 si\u0119 w pierwszej kolejno\u015bci i eksperymentuj\u0105 z dostarczonymi przez JDK metodami, i tak naprawd\u0119 pierwsze refeaktoringi trafi\u0142y ju\u017c do wydanego Spring Framework 6.0. Jako spo\u0142eczno\u015b\u0107 powinno nas to podej\u015bcie cieszy\u0107. Mi\u0142o, \u017ce Springowi zale\u017cy na tym, aby realnie co\u015b na tych wirtualnych w\u0105tkach zyska\u0107, a nie tylko odhaczy\u0107 sobie kolejny \u201erewolucyjny\u201d feature.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":12455,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/31f.gif\" alt=\"\" class=\"wp-image-12455\"\/><figcaption>Ponownie, nowi gracze maj\u0105 o prostu \u0142atwiej ni\u017c wieloletni gigant.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/31f.gif\" alt=\"\" class=\"wp-image-12455\"\/><figcaption>Ponownie, nowi gracze maj\u0105 o prostu \u0142atwiej ni\u017c wieloletni gigant.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatni\u0105 rzecz\u0105 w kontek\u015bcie Spring Framework 6.0 o kt\u00f3rej chcia\u0142bym wspomnie\u0107, to przymiarki do Project CRaC. Mo\u017ce on pozwoli\u0107 na wyeliminowanie jednej z najwi\u0119kszych i najcz\u0119\u015bciej wypominanych Springowi wad - jego d\u0142ugiemu czasowi uruchamiania. Na razie gotowe funkcjonalno\u015bci (nawet w Preview) jeszcze nie s\u0105 gotowe dla szerokich test\u00f3w, ale ju\u017c sam sneak peak, kt\u00f3ry mo\u017cemy zobaczy\u0107 w prezentacji [Java on CRaC: Superfast JVM Application Startup, wyg\u0142oszonej przez <a href=\"https:\/\/twitter.com\/speakjava\">Simona Rittera<\/a> na Devoxx Belgium](<a class=\"autolink\" href=\"https:\/\/www.youtube.com\/watch?v=bWmuqh6wHgE&amp;t=2500s\">https:\/\/www.youtube.com\/watch?v=bWmuqh6wHgE&amp;t=2500s<\/a>) zaostrza apetyt.<\/p>\n","innerContent":["\n<p>Ostatni\u0105 rzecz\u0105 w kontek\u015bcie Spring Framework 6.0 o kt\u00f3rej chcia\u0142bym wspomnie\u0107, to przymiarki do Project CRaC. Mo\u017ce on pozwoli\u0107 na wyeliminowanie jednej z najwi\u0119kszych i najcz\u0119\u015bciej wypominanych Springowi wad - jego d\u0142ugiemu czasowi uruchamiania. Na razie gotowe funkcjonalno\u015bci (nawet w Preview) jeszcze nie s\u0105 gotowe dla szerokich test\u00f3w, ale ju\u017c sam sneak peak, kt\u00f3ry mo\u017cemy zobaczy\u0107 w prezentacji [Java on CRaC: Superfast JVM Application Startup, wyg\u0142oszonej przez <a href=\"https:\/\/twitter.com\/speakjava\">Simona Rittera<\/a> na Devoxx Belgium](<a class=\"autolink\" href=\"https:\/\/www.youtube.com\/watch?v=bWmuqh6wHgE&amp;t=2500s\">https:\/\/www.youtube.com\/watch?v=bWmuqh6wHgE&amp;t=2500s<\/a>) zaostrza apetyt.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":12457,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-35.png\" alt=\"\" class=\"wp-image-12457\"\/><figcaption>I dawajcie to szybko - moje featury lubi\u0119 jak steaki: krwiste.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-35.png\" alt=\"\" class=\"wp-image-12457\"\/><figcaption>I dawajcie to szybko - moje featury lubi\u0119 jak steaki: krwiste.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>To, czego realnie b\u0119dziecie u\u017cywa\u0107 - Spring Boot 3.0<\/h2>\n","innerContent":["\n<h2>To, czego realnie b\u0119dziecie u\u017cywa\u0107 - Spring Boot 3.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tak jak wspomina\u0142em, zak\u0142adam \u017ce spora ilo\u015b\u0107 z Was b\u0119dzie u\u017cywa\u0107 w\u0142a\u015bnie tej dystrybucji Springa. Dlatego, mimo \u017ce ju\u017c zahaczyli\u015bmy o temat AoT to w\u0142a\u015bnie przy okazji Spring Boota zastanowimy si\u0119, do czego tak naprawd\u0119 w praktyce si\u0119 to sprowadza. Dlatego trzeba odkurzy\u0107 stare zapowiedzi i przygl\u0105dn\u0105\u0107 si\u0119 projektowi, kt\u00f3ry nazywa si\u0119 Spring-Native.<\/p>\n","innerContent":["\n<p>Tak jak wspomina\u0142em, zak\u0142adam \u017ce spora ilo\u015b\u0107 z Was b\u0119dzie u\u017cywa\u0107 w\u0142a\u015bnie tej dystrybucji Springa. Dlatego, mimo \u017ce ju\u017c zahaczyli\u015bmy o temat AoT to w\u0142a\u015bnie przy okazji Spring Boota zastanowimy si\u0119, do czego tak naprawd\u0119 w praktyce si\u0119 to sprowadza. Dlatego trzeba odkurzy\u0107 stare zapowiedzi i przygl\u0105dn\u0105\u0107 si\u0119 projektowi, kt\u00f3ry nazywa si\u0119 Spring-Native.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kompilacja Ahead-of-Time o kt\u00f3rej to tak naprawd\u0119 nic innego, jak kompilowanie kodu \u017ar\u00f3d\u0142owego do wariantu finalnego nie poprzez krok po\u015bredni (bajtkod, a nast\u0119pnie kompilator Just-in-Time), ale na samym starcie procesu. Takie podej\u015bcie sprawia, \u017ce z g\u00f3ry mo\u017cna dokona\u0107 optymalizacji i wygenerowanie kodu maszynowego, przy okazji pozbawiaj\u0105c si\u0119 ca\u0142ego JVM-owego balastu, jak Classpath czy te\u017c sama maszyna wirtualna. Dzi\u0119ki temu aplikacje startuj\u0105 szybciej, po\u017ceraj\u0105 r\u00f3wnie\u017c mniej zasob\u00f3w - wynika to z faktu, \u017ce po prostu w uruchomionym procesie jest mniej niepotrzebnych klock\u00f3w.<\/p>\n","innerContent":["\n<p>Kompilacja Ahead-of-Time o kt\u00f3rej to tak naprawd\u0119 nic innego, jak kompilowanie kodu \u017ar\u00f3d\u0142owego do wariantu finalnego nie poprzez krok po\u015bredni (bajtkod, a nast\u0119pnie kompilator Just-in-Time), ale na samym starcie procesu. Takie podej\u015bcie sprawia, \u017ce z g\u00f3ry mo\u017cna dokona\u0107 optymalizacji i wygenerowanie kodu maszynowego, przy okazji pozbawiaj\u0105c si\u0119 ca\u0142ego JVM-owego balastu, jak Classpath czy te\u017c sama maszyna wirtualna. Dzi\u0119ki temu aplikacje startuj\u0105 szybciej, po\u017ceraj\u0105 r\u00f3wnie\u017c mniej zasob\u00f3w - wynika to z faktu, \u017ce po prostu w uruchomionym procesie jest mniej niepotrzebnych klock\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie jest to jednak za darmo - aplikacje kompilowane prze Graal VM (bo to w\u0142a\u015bnie on jest kompilatorem AoT o kt\u00f3rym ca\u0142y czas m\u00f3wimy) musz\u0105 dzia\u0142a\u0107 w ramach \"za\u0142o\u017cenia zamkni\u0119tego \u015bwiata\". Oznacza ono, \u017ce ca\u0142y bytecode w aplikacji, kt\u00f3ry mo\u017ce by\u0107 wywo\u0142any w czasie pracy aplikacji, musi by\u0107 znany (obserwowany i analizowany) ju\u017c w czasie budowania. Szczeg\u00f3lnie mocno wp\u0142ywa to na programy u\u017cywaj\u0105ce mechanizmu refleksji. Kompilator bowiem musi domy\u015ble\u0107 si\u0119, jakie (zwykle dynamicznie) zasoby powinien do\u0142o\u017cy\u0107 do finalnego artefaktu, mimo \u017ce w kodzie nie ma do nich bezpo\u015brednich odwo\u0142a\u0144. Spring, jak wszyscy zdaj\u0105 sobie spraw\u0119 - jest bardzo mocno oparty o refleksj\u0119, dlatego prace s\u0142u\u017c\u0105ce do przystosowania go w\u0142a\u015bnie do dzia\u0142ania z GraalVM zosta\u0142y zapakowane w projekt R&amp;D o nazwie Spring-Native, kt\u00f3ry rozwijany jest od prawie trzech lat. Teraz finalnie staje si\u0119 on cz\u0119\u015bci\u0105 Springa, a najwi\u0119cej skorzysta na nim Spring Boot.<\/p>\n","innerContent":["\n<p>Nie jest to jednak za darmo - aplikacje kompilowane prze Graal VM (bo to w\u0142a\u015bnie on jest kompilatorem AoT o kt\u00f3rym ca\u0142y czas m\u00f3wimy) musz\u0105 dzia\u0142a\u0107 w ramach \"za\u0142o\u017cenia zamkni\u0119tego \u015bwiata\". Oznacza ono, \u017ce ca\u0142y bytecode w aplikacji, kt\u00f3ry mo\u017ce by\u0107 wywo\u0142any w czasie pracy aplikacji, musi by\u0107 znany (obserwowany i analizowany) ju\u017c w czasie budowania. Szczeg\u00f3lnie mocno wp\u0142ywa to na programy u\u017cywaj\u0105ce mechanizmu refleksji. Kompilator bowiem musi domy\u015ble\u0107 si\u0119, jakie (zwykle dynamicznie) zasoby powinien do\u0142o\u017cy\u0107 do finalnego artefaktu, mimo \u017ce w kodzie nie ma do nich bezpo\u015brednich odwo\u0142a\u0144. Spring, jak wszyscy zdaj\u0105 sobie spraw\u0119 - jest bardzo mocno oparty o refleksj\u0119, dlatego prace s\u0142u\u017c\u0105ce do przystosowania go w\u0142a\u015bnie do dzia\u0142ania z GraalVM zosta\u0142y zapakowane w projekt R&amp;D o nazwie Spring-Native, kt\u00f3ry rozwijany jest od prawie trzech lat. Teraz finalnie staje si\u0119 on cz\u0119\u015bci\u0105 Springa, a najwi\u0119cej skorzysta na nim Spring Boot.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli chcecie dowiedzie\u0107 si\u0119 wi\u0119cej o tym, jak dzia\u0142a GraalVM, zapraszam do <a href=\"https:\/\/spring.io\/blog\/2022\/03\/22\/initial-aot-support-in-spring-framework-6-0-0-m3\">artyku\u0142u napisanego w kontek\u015bcie Spring Framework<\/a>, ale r\u00f3wnie\u017c oficjalnego tekstu Oracle na temat <a href=\"https:\/\/docs.oracle.com\/en\/learn\/understanding-reflection-graalvm-native-image\/index.html#step-4-introducing-native-image-reflection-config\">natywnych obraz\u00f3w<\/a>.<\/p>\n","innerContent":["\n<p>Je\u015bli chcecie dowiedzie\u0107 si\u0119 wi\u0119cej o tym, jak dzia\u0142a GraalVM, zapraszam do <a href=\"https:\/\/spring.io\/blog\/2022\/03\/22\/initial-aot-support-in-spring-framework-6-0-0-m3\">artyku\u0142u napisanego w kontek\u015bcie Spring Framework<\/a>, ale r\u00f3wnie\u017c oficjalnego tekstu Oracle na temat <a href=\"https:\/\/docs.oracle.com\/en\/learn\/understanding-reflection-graalvm-native-image\/index.html#step-4-introducing-native-image-reflection-config\">natywnych obraz\u00f3w<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":12461,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-12461\"\/><figcaption>GraalVM to bardzo z\u0142o\u017cony temat, wi\u0119c zanim zaczniecie eksperymentowa\u0107 sugeruje rzuci\u0107 okiem chocia\u017c na ten ostatni link.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-12461\"\/><figcaption>GraalVM to bardzo z\u0142o\u017cony temat, wi\u0119c zanim zaczniecie eksperymentowa\u0107 sugeruje rzuci\u0107 okiem chocia\u017c na ten ostatni link.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co poza Spring-Native? Jednym z moich ulubionych dodatk\u00f3w do Spring Boota to ulepszonemu wsparciu dla Micrometer. Od pewnego czasu przygl\u0105dam si\u0119 rozwojowi tej biblioteki i jestem pewien, \u017ce na naszych oczach rodzi si\u0119 w\u0142a\u015bnie nowy standard, kt\u00f3ry zostanie z nami na lata. Objawia si\u0119 to cho\u0107by przez to, \u017ce coraz wi\u0119cej narz\u0119dzi zapewni\u0107 pr\u00f3buje dla niego jak najwygodniejsze wsparcie. Tak jak Quarkus porzuci\u0142 dla Micrometer rozwi\u0105zania pochodz\u0105ce z Jakarty EE, tak teraz w Spring Boot 3.0 r\u00f3wnie\u017c po\u0142o\u017cono nacisk na jak najwi\u0119ksz\u0105 kompatybilno\u015b\u0107. Przyk\u0142adowo, w nowej wersji frameworki Micrometer Tracing zast\u0105pi Spring Cloud Sleuth. Je\u017celi jeste\u015bcie ciekawi, jakie nowo\u015bci w tym aspekcie czekaj\u0105 u\u017cytkownik\u00f3w Spring Boot 3.0, zapraszam do artyku\u0142u <a href=\"https:\/\/spring.io\/blog\/2022\/10\/12\/observability-with-spring-boot-3\">Observability with Spring Boot 3<\/a><\/p>\n","innerContent":["\n<p>Co poza Spring-Native? Jednym z moich ulubionych dodatk\u00f3w do Spring Boota to ulepszonemu wsparciu dla Micrometer. Od pewnego czasu przygl\u0105dam si\u0119 rozwojowi tej biblioteki i jestem pewien, \u017ce na naszych oczach rodzi si\u0119 w\u0142a\u015bnie nowy standard, kt\u00f3ry zostanie z nami na lata. Objawia si\u0119 to cho\u0107by przez to, \u017ce coraz wi\u0119cej narz\u0119dzi zapewni\u0107 pr\u00f3buje dla niego jak najwygodniejsze wsparcie. Tak jak Quarkus porzuci\u0142 dla Micrometer rozwi\u0105zania pochodz\u0105ce z Jakarty EE, tak teraz w Spring Boot 3.0 r\u00f3wnie\u017c po\u0142o\u017cono nacisk na jak najwi\u0119ksz\u0105 kompatybilno\u015b\u0107. Przyk\u0142adowo, w nowej wersji frameworki Micrometer Tracing zast\u0105pi Spring Cloud Sleuth. Je\u017celi jeste\u015bcie ciekawi, jakie nowo\u015bci w tym aspekcie czekaj\u0105 u\u017cytkownik\u00f3w Spring Boot 3.0, zapraszam do artyku\u0142u <a href=\"https:\/\/spring.io\/blog\/2022\/10\/12\/observability-with-spring-boot-3\">Observability with Spring Boot 3<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To oczywi\u015bcie nie wszystkie nowo\u015bci - spore przemodelowanie przeszed\u0142 min. model properties\u00f3w aplikacji. te najwa\u017cniejsze znajdziecie w oficjalnym Release Note.<\/p>\n","innerContent":["\n<p>To oczywi\u015bcie nie wszystkie nowo\u015bci - spore przemodelowanie przeszed\u0142 min. model properties\u00f3w aplikacji. te najwa\u017cniejsze znajdziecie w oficjalnym Release Note.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Projekty towarzysz\u0105ce<\/h2>\n","innerContent":["\n<h2>Projekty towarzysz\u0105ce<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>\u017beby zrozumie\u0107, jak wielk\u0105 zmian\u0105 by\u0142y poprawki wprowadzone przez Spring Framework 6.0 - kompilacja Ahead-of-Time, migracja do Jakarty EE 10, a tak\u017ce dodanie wsparcia dla Micrometer w Spring Boot - wystarczy spojrze\u0107 na release notes wi\u0119kszo\u015bci projekt\u00f3w towarzysz\u0105cych. Te dominowane s\u0105 bowiem przez raportowanie o kompatybilno\u015bci z najnowsz\u0105 wersj\u0105 projektu, spod kt\u00f3rej przebijaj\u0105 si\u0119 co najwy\u017cej drobne poprawki - pokazuje to, ile pracy ca\u0142ej spo\u0142eczno\u015bci by\u0142o wymagane, \u017ceby zrobi\u0107 du\u017cy krok do przodu.<\/p>\n","innerContent":["\n<p>\u017beby zrozumie\u0107, jak wielk\u0105 zmian\u0105 by\u0142y poprawki wprowadzone przez Spring Framework 6.0 - kompilacja Ahead-of-Time, migracja do Jakarty EE 10, a tak\u017ce dodanie wsparcia dla Micrometer w Spring Boot - wystarczy spojrze\u0107 na release notes wi\u0119kszo\u015bci projekt\u00f3w towarzysz\u0105cych. Te dominowane s\u0105 bowiem przez raportowanie o kompatybilno\u015bci z najnowsz\u0105 wersj\u0105 projektu, spod kt\u00f3rej przebijaj\u0105 si\u0119 co najwy\u017cej drobne poprawki - pokazuje to, ile pracy ca\u0142ej spo\u0142eczno\u015bci by\u0142o wymagane, \u017ceby zrobi\u0107 du\u017cy krok do przodu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":12470,"width":477,"height":512,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-37-953x1024.png\" alt=\"\" class=\"wp-image-12470\" width=\"477\" height=\"512\"\/><figcaption>Migracja na AoT - Obietnice vs Rzeczywisto\u015b\u0107<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-37-953x1024.png\" alt=\"\" class=\"wp-image-12470\" width=\"477\" height=\"512\"\/><figcaption>Migracja na AoT - Obietnice vs Rzeczywisto\u015b\u0107<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Taki np. <a href=\"https:\/\/spring.io\/blog\/2022\/11\/21\/spring-web-services-4-0-0-is-now-ga\">Spring Web Service 4.0<\/a> nie chwali si\u0119 (poza powy\u017cszymi upgrade'ami) niczym poza przej\u015bciem na GitHuba je\u015bli chodzi o \u015bledzenie releas\u00f3w. <a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">Spring Security 6.0<\/a> te\u017c wprowadza raczej drobne dodatki. Troch\u0119 ciekawiej prezentuje si\u0119 to w wypadku <a href=\"https:\/\/spring.io\/blog\/2022\/11\/23\/spring-for-graphql-1-1-0-released\">Spring GraphQL 1.1.0<\/a>, <a href=\"https:\/\/spring.io\/blog\/2022\/11\/18\/spring-data-2022-0-goes-ga\">Spring Data 2022.0<\/a> czy nowych <a href=\"https:\/\/spring.io\/blog\/2022\/11\/21\/new-major-releases-of-spring-for-apache-kafka-and-spring-for-rabbitmq\">Spring for Apache Kafka 3.0 i Spring for RabbitMQ 3.0<\/a> - te zawieraj\u0105 troch\u0119 nowych API. Jednak nawet w ich przypadku gro zapowiedzi to jednak informacji o udanej migracji, nawet je\u015bli Spring Data mo\u017cna uzna\u0107 za wybijaj\u0105cy si\u0119 przypadek projektu, kt\u00f3ry realnie poinformowa\u0142, z czym ta ca\u0142a kompilacja AoT si\u0119 wi\u0105\u017ce.<\/p>\n","innerContent":["\n<p>Taki np. <a href=\"https:\/\/spring.io\/blog\/2022\/11\/21\/spring-web-services-4-0-0-is-now-ga\">Spring Web Service 4.0<\/a> nie chwali si\u0119 (poza powy\u017cszymi upgrade'ami) niczym poza przej\u015bciem na GitHuba je\u015bli chodzi o \u015bledzenie releas\u00f3w. <a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">Spring Security 6.0<\/a> te\u017c wprowadza raczej drobne dodatki. Troch\u0119 ciekawiej prezentuje si\u0119 to w wypadku <a href=\"https:\/\/spring.io\/blog\/2022\/11\/23\/spring-for-graphql-1-1-0-released\">Spring GraphQL 1.1.0<\/a>, <a href=\"https:\/\/spring.io\/blog\/2022\/11\/18\/spring-data-2022-0-goes-ga\">Spring Data 2022.0<\/a> czy nowych <a href=\"https:\/\/spring.io\/blog\/2022\/11\/21\/new-major-releases-of-spring-for-apache-kafka-and-spring-for-rabbitmq\">Spring for Apache Kafka 3.0 i Spring for RabbitMQ 3.0<\/a> - te zawieraj\u0105 troch\u0119 nowych API. Jednak nawet w ich przypadku gro zapowiedzi to jednak informacji o udanej migracji, nawet je\u015bli Spring Data mo\u017cna uzna\u0107 za wybijaj\u0105cy si\u0119 przypadek projektu, kt\u00f3ry realnie poinformowa\u0142, z czym ta ca\u0142a kompilacja AoT si\u0119 wi\u0105\u017ce.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Mikroserwisy zaczynaj\u0105 by\u0107 passe - Spring Modulith<\/h2>\n","innerContent":["\n<h2>Mikroserwisy zaczynaj\u0105 by\u0107 passe - Spring Modulith<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przy okazji opisywania Spring Boota 3.0 wspomnia\u0142em, \u017ce to w\u0142a\u015bnie ta wersja b\u0119dzie prawdopodobnie docelow\u0105 dla wi\u0119kszo\u015bci u\u017cytkownik\u00f3w Springa (a przynajmniej tych, kt\u00f3rzy w og\u00f3le rozwa\u017caj\u0105 migracj\u0119 na jego now\u0105 aktualizacj\u0119). Spring Boot to w ko\u0144cu wydanie dedykowane cho\u0107by takim aplikacj\u0105 Cloud Native czy og\u00f3lnie poj\u0119tym Mikroserwisom. Ostatnimi laty (czy nawet w ci\u0105gu ostatniej dekady) to w\u0142a\u015bnie Mikroserwisy by\u0142y tym wzorcem architektonicznym, kt\u00f3ry sta\u0142 si\u0119 tym \"nowoczesnym\" sposobem tworzenia aplikacji, do poziomu, gdy mo\u017cna go uzna\u0107 za swoisty kult cargo, r\u00f3wnie\u017c w \u015bwiecie Javy. Tak d\u0142ugo walczyli\u015bmy, aby nasze frameworki nadawa\u0142y si\u0119 do tego typu architektur, \u017ce teraz traktujemy je jako rozwi\u0105zanie domy\u015blne.<\/p>\n","innerContent":["\n<p>Przy okazji opisywania Spring Boota 3.0 wspomnia\u0142em, \u017ce to w\u0142a\u015bnie ta wersja b\u0119dzie prawdopodobnie docelow\u0105 dla wi\u0119kszo\u015bci u\u017cytkownik\u00f3w Springa (a przynajmniej tych, kt\u00f3rzy w og\u00f3le rozwa\u017caj\u0105 migracj\u0119 na jego now\u0105 aktualizacj\u0119). Spring Boot to w ko\u0144cu wydanie dedykowane cho\u0107by takim aplikacj\u0105 Cloud Native czy og\u00f3lnie poj\u0119tym Mikroserwisom. Ostatnimi laty (czy nawet w ci\u0105gu ostatniej dekady) to w\u0142a\u015bnie Mikroserwisy by\u0142y tym wzorcem architektonicznym, kt\u00f3ry sta\u0142 si\u0119 tym \"nowoczesnym\" sposobem tworzenia aplikacji, do poziomu, gdy mo\u017cna go uzna\u0107 za swoisty kult cargo, r\u00f3wnie\u017c w \u015bwiecie Javy. Tak d\u0142ugo walczyli\u015bmy, aby nasze frameworki nadawa\u0142y si\u0119 do tego typu architektur, \u017ce teraz traktujemy je jako rozwi\u0105zanie domy\u015blne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W spo\u0142eczno\u015bci jednak coraz cz\u0119\u015bciej pojawia nawo\u0142ywanie do powrotu do monolitu, ale troch\u0119 wymy\u015blonego na nowo. Zwolennicy tego podej\u015bcia nawo\u0142uj\u0105, \u017ce przy u\u017cyciu dzisiejszych narz\u0119dzi i dobrej modularyzacji jeste\u015bmy w stanie stworzy\u0107 codebase posiadaj\u0105cy spor\u0105 ilo\u015b\u0107 zalet mikroserwis\u00f3w przy zaskakuj\u0105co ma\u0142ej ilo\u015bci jego wad. Zainteresowanych odsy\u0142am do koncepcji <a href=\"https:\/\/m.signalvnoise.com\/the-majestic-monolith\/\">Majestatycznego Monolitu<\/a> autorstwa <a href=\"https:\/\/m.signalvnoise.com\/author\/dhh\/\">DHH<\/a>, a tak\u017ce interesuj\u0105cej serii <a href=\"https:\/\/www.kamilgrzybek.com\/design\/modular-monolith-primer\/\">Modular Monolith: A Primer<\/a>.<\/p>\n","innerContent":["\n<p>W spo\u0142eczno\u015bci jednak coraz cz\u0119\u015bciej pojawia nawo\u0142ywanie do powrotu do monolitu, ale troch\u0119 wymy\u015blonego na nowo. Zwolennicy tego podej\u015bcia nawo\u0142uj\u0105, \u017ce przy u\u017cyciu dzisiejszych narz\u0119dzi i dobrej modularyzacji jeste\u015bmy w stanie stworzy\u0107 codebase posiadaj\u0105cy spor\u0105 ilo\u015b\u0107 zalet mikroserwis\u00f3w przy zaskakuj\u0105co ma\u0142ej ilo\u015bci jego wad. Zainteresowanych odsy\u0142am do koncepcji <a href=\"https:\/\/m.signalvnoise.com\/the-majestic-monolith\/\">Majestatycznego Monolitu<\/a> autorstwa <a href=\"https:\/\/m.signalvnoise.com\/author\/dhh\/\">DHH<\/a>, a tak\u017ce interesuj\u0105cej serii <a href=\"https:\/\/www.kamilgrzybek.com\/design\/modular-monolith-primer\/\">Modular Monolith: A Primer<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":12466,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-36.png\" alt=\"\" class=\"wp-image-12466\"\/><figcaption>Bo zaskakuj\u0105co cz\u0119sto, tak naprawd\u0119 i tak wychodzi nam po prostu rozproszony monolith<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-36.png\" alt=\"\" class=\"wp-image-12466\"\/><figcaption>Bo zaskakuj\u0105co cz\u0119sto, tak naprawd\u0119 i tak wychodzi nam po prostu rozproszony monolith<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No dobra, ale jak to si\u0119 ma do tematu Springa? Ot\u00f3\u017c wraz ze Spring Bootem swoj\u0105 premier\u0119 mia\u0142 projekt <a href=\"https:\/\/spring.io\/blog\/2022\/10\/21\/introducing-spring-modulith\">Spring Modulith w wersji 0.1<\/a>, kt\u00f3ry ma wprowadzi\u0107 Springa w er\u0119 majestatycznego monolitu. Spring-Modulith to rozwini\u0119cie istniej\u0105cego projektu <a href=\"https:\/\/github.com\/moduliths\/moduliths\">Moduliths<\/a> (kt\u00f3rego zast\u0105pi), ale jeszcze lepiej zintegrowanego z samym Springiem. Bardzo ciekawy jest sam spos\u00f3b dzia\u0142ania ca\u0142o\u015bci - zamiast mocno ingerowa\u0107 on w proces budowania, wykorzystuje do weryfikacji projektu testy integracyjne. Te odpalaj\u0105 ArchUnit - bibliotek\u0119, kt\u00f3rej celem jest w\u0142a\u015bnie weryfikacja zale\u017cno\u015bci mi\u0119dzy poszczeg\u00f3lnymi modu\u0142ami. Magia Modulitha polega jednak na tym, \u017ce dzi\u0119ki znanemu \u015brodowisku uruchomieniowemu (aplikacje Spring Boot 3.0) jest w stanie prekonfigurowa\u0107 ArchUnita - co te\u017c czyni. Dzi\u0119ki temu w \u0142atwy spos\u00f3b jeste\u015bmy w stanie przetestowa\u0107, czy jakie\u015b architektoniczne spaghetti nie przemkn\u0119\u0142o przez Code Review.<\/p>\n","innerContent":["\n<p>No dobra, ale jak to si\u0119 ma do tematu Springa? Ot\u00f3\u017c wraz ze Spring Bootem swoj\u0105 premier\u0119 mia\u0142 projekt <a href=\"https:\/\/spring.io\/blog\/2022\/10\/21\/introducing-spring-modulith\">Spring Modulith w wersji 0.1<\/a>, kt\u00f3ry ma wprowadzi\u0107 Springa w er\u0119 majestatycznego monolitu. Spring-Modulith to rozwini\u0119cie istniej\u0105cego projektu <a href=\"https:\/\/github.com\/moduliths\/moduliths\">Moduliths<\/a> (kt\u00f3rego zast\u0105pi), ale jeszcze lepiej zintegrowanego z samym Springiem. Bardzo ciekawy jest sam spos\u00f3b dzia\u0142ania ca\u0142o\u015bci - zamiast mocno ingerowa\u0107 on w proces budowania, wykorzystuje do weryfikacji projektu testy integracyjne. Te odpalaj\u0105 ArchUnit - bibliotek\u0119, kt\u00f3rej celem jest w\u0142a\u015bnie weryfikacja zale\u017cno\u015bci mi\u0119dzy poszczeg\u00f3lnymi modu\u0142ami. Magia Modulitha polega jednak na tym, \u017ce dzi\u0119ki znanemu \u015brodowisku uruchomieniowemu (aplikacje Spring Boot 3.0) jest w stanie prekonfigurowa\u0107 ArchUnita - co te\u017c czyni. Dzi\u0119ki temu w \u0142atwy spos\u00f3b jeste\u015bmy w stanie przetestowa\u0107, czy jakie\u015b architektoniczne spaghetti nie przemkn\u0119\u0142o przez Code Review.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jako, \u017ce jak pisali\u015bmy wy\u017cej, Spring wycofa\u0142 si\u0119 (na razie) ze wsparcia JPMS-a, Modulith wydaje si\u0119 by\u0107 interesuj\u0105c\u0105, prost\u0105 alternatyw\u0105. Je\u017celi dodamy do tego fakt, \u017ce projekt jest w stanie automatycznie generowa\u0107 nam diagramy architektoniczne z \u017cywego kodu, warto si\u0119 projektem zainteresowa\u0107. W tym celu podrzucam dwa dodatkowe materia\u0142y - <a href=\"https:\/\/www.infoq.com\/news\/2022\/11\/spring-modulith-launch\/\">wywiad z tw\u00f3rc\u0105 projektu, Oliverem Drotbohmem, od InfoQ<\/a> oraz <a href=\"https:\/\/blog.frankel.ch\/spring-modulith-modularity-maturity\/\">tutorial od Nicolasa Fr\u00e4nkela<\/a>.<\/p>\n","innerContent":["\n<p>Jako, \u017ce jak pisali\u015bmy wy\u017cej, Spring wycofa\u0142 si\u0119 (na razie) ze wsparcia JPMS-a, Modulith wydaje si\u0119 by\u0107 interesuj\u0105c\u0105, prost\u0105 alternatyw\u0105. Je\u017celi dodamy do tego fakt, \u017ce projekt jest w stanie automatycznie generowa\u0107 nam diagramy architektoniczne z \u017cywego kodu, warto si\u0119 projektem zainteresowa\u0107. W tym celu podrzucam dwa dodatkowe materia\u0142y - <a href=\"https:\/\/www.infoq.com\/news\/2022\/11\/spring-modulith-launch\/\">wywiad z tw\u00f3rc\u0105 projektu, Oliverem Drotbohmem, od InfoQ<\/a> oraz <a href=\"https:\/\/blog.frankel.ch\/spring-modulith-modularity-maturity\/\">tutorial od Nicolasa Fr\u00e4nkela<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>To na sam koniec - jak si\u0119 zmigrowa\u0107?<\/h2>\n","innerContent":["\n<h2>To na sam koniec - jak si\u0119 zmigrowa\u0107?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No dobra, porozmawiali\u015bmy sobie o zmianach, jakie nowy Spring (traktuj\u0105c go jako ca\u0142okszta\u0142t) przyniesie i mam nadzieje, \u017ce pomimo pewnej ilo\u015bci pracy, jak\u0105 trzeba wykona\u0107, uda\u0142o mi si\u0119 Was zach\u0119ci\u0107 do spr\u00f3bowania. Wiadomo jednak, \u017ce w tak\u0105 przygod\u0119 najlepiej ruszy\u0107 przygotowanym.<\/p>\n","innerContent":["\n<p>No dobra, porozmawiali\u015bmy sobie o zmianach, jakie nowy Spring (traktuj\u0105c go jako ca\u0142okszta\u0142t) przyniesie i mam nadzieje, \u017ce pomimo pewnej ilo\u015bci pracy, jak\u0105 trzeba wykona\u0107, uda\u0142o mi si\u0119 Was zach\u0119ci\u0107 do spr\u00f3bowania. Wiadomo jednak, \u017ce w tak\u0105 przygod\u0119 najlepiej ruszy\u0107 przygotowanym.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tw\u00f3rcy Springa ju\u017c w maju <a href=\"https:\/\/spring.io\/blog\/2022\/05\/24\/preparing-for-spring-boot-3-0\">podrzucili troch\u0119 sugestii<\/a>, w jaki spos\u00f3b przystosowa\u0107 sw\u00f3j kod na Spring Boota 3.0 i je\u015bli rzeczywi\u015bcie to zrobili\u015bcie (podbili\u015bcie Jave, Jakarte, prze migrowali\u015bcie Propertiesy, pousuwali\u015bcie przestarza\u0142y kod) to jeste\u015bcie w zasadzie gotowi od razu zacz\u0105\u0107 si\u0119 bawi\u0107 ca\u0142o\u015bci\u0105. Je\u017celi jednak opr\u00f3cz tego, \u017ce chcecie po prostu podbi\u0107 wersje zale\u017cno\u015bci, to jeszcze chcecie maksymalnie wykorzysta\u0107 nowe mo\u017cliwo\u015bci frameworka (i Javy), koniecznie rzu\u0107cie okiem na artyku\u0142 <a href=\"https:\/\/vladmihalcea.com\/spring-6-migration\/\">The best way to do the Spring 6 migration<\/a> Vlada Mihalcea. Przeczytacie w nim, jak uzyska\u0107 najwi\u0119cej warto\u015bci z ca\u0142ego procesu.<\/p>\n","innerContent":["\n<p>Tw\u00f3rcy Springa ju\u017c w maju <a href=\"https:\/\/spring.io\/blog\/2022\/05\/24\/preparing-for-spring-boot-3-0\">podrzucili troch\u0119 sugestii<\/a>, w jaki spos\u00f3b przystosowa\u0107 sw\u00f3j kod na Spring Boota 3.0 i je\u015bli rzeczywi\u015bcie to zrobili\u015bcie (podbili\u015bcie Jave, Jakarte, prze migrowali\u015bcie Propertiesy, pousuwali\u015bcie przestarza\u0142y kod) to jeste\u015bcie w zasadzie gotowi od razu zacz\u0105\u0107 si\u0119 bawi\u0107 ca\u0142o\u015bci\u0105. Je\u017celi jednak opr\u00f3cz tego, \u017ce chcecie po prostu podbi\u0107 wersje zale\u017cno\u015bci, to jeszcze chcecie maksymalnie wykorzysta\u0107 nowe mo\u017cliwo\u015bci frameworka (i Javy), koniecznie rzu\u0107cie okiem na artyku\u0142 <a href=\"https:\/\/vladmihalcea.com\/spring-6-migration\/\">The best way to do the Spring 6 migration<\/a> Vlada Mihalcea. Przeczytacie w nim, jak uzyska\u0107 najwi\u0119cej warto\u015bci z ca\u0142ego procesu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/7594c85d89ea3e5fe7fab1000512330e.jpg\" alt=\"\"\/><figcaption>To co, powodzenia!<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/7594c85d89ea3e5fe7fab1000512330e.jpg\" alt=\"\"\/><figcaption>To co, powodzenia!<\/figcaption><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/12448","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=12448"}],"version-history":[{"count":7,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/12448\/revisions"}],"predecessor-version":[{"id":12485,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/12448\/revisions\/12485"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/12479"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=12448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=12448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=12448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}