{"id":16050,"date":"2023-06-02T14:03:23","date_gmt":"2023-06-02T12:03:23","guid":{"rendered":"https:\/\/vived.io\/?p=16050"},"modified":"2023-06-03T08:24:49","modified_gmt":"2023-06-03T06:24:49","slug":"wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/","title":{"rendered":"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co  przyni\u00f3s\u0142 Spring I\/O 2023 &#8211;  JVM Weekly vol. 137"},"content":{"rendered":"\n<h2 id=\"1-java-moze-dostac-dedykowany-profil-wydajnosciowy-na-potrzeby-konteneryzacji\" data-num=1>1. Java mo\u017ce dosta\u0107 dedykowany profil wydajno\u015bciowy na potrzeby konteneryzacji<\/h2>\n\n\n\n<p>Wielokrotnie spotykam si\u0119 z pewnym sceptycyzmem je\u015bli chodzi o raporty bran\u017cowe, prezentuj\u0105ce statystyki poszczeg\u00f3lnych wersji. &#8222;A po co to komu&#8221;, &#8222;z\u0142a metodyka&#8221;, &#8222;grupa niereprezentatywna&#8221; to tylko cz\u0119\u015b\u0107 z komentarzy, kt\u00f3re mo\u017cna znale\u017a\u0107 w sieci. Jednocze\u015bnie jednak warto czasem po\u015bwi\u0119ci\u0107 tego typu badaniom troch\u0119 wi\u0119cej miejsca. Par\u0119 tygodni temu <a href=\"https:\/\/vived.substack.com\/i\/119451377\/amazon-is-pushing-ever-wider-with-its-jdk\">mia\u0142em okazj\u0119 podzieli\u0107 si\u0119 z Wami dwoma raportami<\/a>, odpowiednio od Vaadina oraz New Relica. O ile o pierwszym chyba ju\u017c wszyscy zapomnieli (Enterprise Java, kt\u00f3rej by\u0142 po\u015bwi\u0119cony, nie jest najbardziej &#8222;sexy&#8221; tematem na \u015bwiecie), to publikacja &#8222;The State of Java Ecosystem 2023&#8221; okazuje si\u0119 mie\u0107 szanse na nieco szersze reperkusje, ni\u017c ktokolwiek m\u00f3g\u0142 si\u0119 spodziewa\u0107.<\/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\/2023\/06\/image-5-1024x593.png\" alt=\"\" class=\"wp-image-16076\" width=\"512\" height=\"297\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-5-1024x593.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-5-300x174.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-5-768x445.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-5.png 1354w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption class=\"wp-element-caption\">Tak, tego si\u0119 nie spodziewa\u0142em<\/figcaption><\/figure><\/div>\n\n\n<p>Ludzie odpowiadaj\u0105cy za Jav\u0119 w Microsofcie <a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-dev\/2023-May\/074325.html\">poinformowali ostatnio<\/a>, \u017ce pracuj\u0105 nad JEP-em maj\u0105cym wprowadzi\u0107 Profile Ergonomiki do Java Virtual Machine (JVM). Ta funkcja umo\u017cliwi\u0142aby posiadanie w Javie dw\u00f3ch r\u00f3\u017cnych konfiguracji: profilu 'wsp\u00f3\u0142dzielonego&#8217;, zaprojektowany z za\u0142o\u017ceniem, \u017ce JVM musi dzieli\u0107 zasoby z innymi procesami, oraz profil 'dedykowany&#8217; dla system\u00f3w, kt\u00f3re dedykuj\u0105 zasoby wy\u0142\u0105cznie dla procesu JVM i ta mo\u017ce bra\u0107 tyle, ile fabryka da\u0142a. Ten ruch jest motywowany wspomnianymi danymi od New Relic, kt\u00f3re pokazuj\u0105, \u017ce ponad 70% monitorowanych przez nich JVM dzia\u0142a w dedykowanych \u015brodowiskach, takich jak kontenery, bardzo cz\u0119sto bez \u017cadnej konfiguracji, a wi\u0119c bardzo niewydajnie.<\/p>\n\n\n\n<p>Proponowany profil 'dedykowany&#8217; ma na celu umo\u017cliwienie JVM bardziej efektywnego wykorzystania dost\u0119pnych zasob\u00f3w, szczeg\u00f3lnie w dedykowanych \u015brodowiskach. Na przyk\u0142ad, w przeciwie\u0144stwie do obecnych &#8222;default\u00f3w&#8221;, gdzie maksymalny rozmiar sterty JVM waha si\u0119 mi\u0119dzy 25% a 50% w zale\u017cno\u015bci od dost\u0119pnego rozmiaru pami\u0119ci, nowy profil m\u00f3g\u0142by zwi\u0119kszy\u0107 domy\u015blne przydzielanie rozmiaru sterty do 60%-70%. Ponadto zawiera\u0142by r\u00f3wnie\u017c inne heurystyki co do wyboru GC, liczenia aktywnych procesor\u00f3w i rozmiar\u00f3w wewn\u0119trznych pul w\u0105tk\u00f3w JVM. Poza wprowadzeniem dw\u00f3ch pierwszych, wspomnianych profili, JEP ma wprowadzi\u0107 struktury umo\u017cliwiaj\u0105ce rozszerzanie OpenJDK o wi\u0119cej profili. Teraz na razie jednak czekamy na wi\u0119cej, poniewa\u017c prace dopiero zosta\u0142y zapowiedziane szerszej spo\u0142eczno\u015bci.<\/p>\n\n\n\n<p>Ale &#8222;Ergonomic Profiles&#8221; by\u0142y tylko dodatkiem (cho\u0107 od tematu konteneryzacji nie uciekniemy, jeszcze wr\u00f3ci). Przejd\u017amy do prawdziwego mi\u0119ska.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"360\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-1.png\" alt=\"\" class=\"wp-image-16058\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-1.png 480w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-1-300x225.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><figcaption class=\"wp-element-caption\">Tak, we wtorek wychodzi Diablo. Tak, wiem \u017ce albo wiecie albo nie pytali\u015bcie \ud83d\ude48<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"2-wirtualne-watki-crac-graalvm-spring-boot-3-1-co-ciekawego-przyniosl-spring-i-o-2023\" data-num=2>2. Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1 &#8211; co ciekawego przyni\u00f3s\u0142 Spring I\/O 2023<\/h2>\n\n\n\n<p>Ja wiem, \u017ce ju\u017c wszyscy pewnie zapomnieli, ale w po\u0142owie maja odby\u0142 si\u0119 Spring I\/O 2023. Dla tych kt\u00f3rzy (tak jak ja, niestety) nie mieli okazji odwiedzi\u0107 s\u0142onecznej Barcelony, <a href=\"https:\/\/www.youtube.com\/watch?v=IgmeFeTU1a4\">na oficjalnym kanale konferencji pojawi\u0142y si\u0119 nagrania talk\u00f3w<\/a>. Dlatego te\u017c wreszcie teraz, gdy ju\u017c ka\u017cdy mo\u017ce ogl\u0105dn\u0105\u0107 sobie konferencje nie z ze swojego pokoju, mo\u017cemy si\u0119 skupi\u0107 na przygl\u0105dni\u0119ciu tego, co zosta\u0142o pokazane.<\/p>\n\n\n\n<p>Zacznijmy od Keynote, kt\u00f3rego mo\u017cna potraktowa\u0107 jako Spis Tre\u015bci. Podczas niego <a href=\"https:\/\/twitter.com\/springjuergen\">Juergen Hoeller<\/a> &#8211; project lead Spring Frameworku &#8211; zapowiedzia\u0142 nadchodz\u0105ce wydania Spring Framework 6.1 i Spring Boot 3.2 oraz nowo\u015bci, kt\u00f3re przyjd\u0105 ze zbli\u017caj\u0105cym si\u0119 wydaniem, takie jak wirtualne w\u0105tkach (min. przez prace nad modernizacj\u0105 stosu servlet\u00f3w). Na scenie pojawi\u0142a si\u0119 te\u017c pracuj\u0105cy nad Springiem <a href=\"https:\/\/twitter.com\/sdeleuze\">S\u00e9bastien Deleuze<\/a> oraz <a href=\"https:\/\/twitter.com\/alina_yurenko\">Alina Yurenko<\/a>, Developer Advocate GraalVM, kt\u00f3rzy opowiadali o tym, jak wielk\u0105 rewolucj\u0105 dla projektu by\u0142o Spring Boot Native Image w celu szybszego uruchamiania i mniejszego zu\u017cycia zasob\u00f3w. Na scenie pokazano nam Spring Cloud Function, czyli pr\u00f3b\u0119 wej\u015bcia Springa w rynek Serverless. S\u00e9bastien dodatkowo opowiedzia\u0142 te\u017c o CRaC-u i przychodz\u0105cymi z nim nowych mo\u017cliwo\u015bciach. Na scenie nie mog\u0142o zabrakn\u0105\u0107 te\u017c&nbsp;<a href=\"https:\/\/twitter.com\/starbuxman\">Josha Longa<\/a>, Spring Developer Advocate, kt\u00f3ry pokazywa\u0142 nowe mo\u017cliwo\u015bci Spring Boot 3.1.<\/p>\n\n\n\n<p>A teraz rozpakujemy sobie te tematy, w\u0142a\u015bciwie bowiem ka\u017cdy z poruszonych na Keynote dosta\u0142 sw\u00f3j followup.<\/p>\n\n\n\n<p>Przyk\u0142adowo, podczas <a href=\"https:\/\/www.youtube.com\/watch?v=_o7NIaOVjNM\">Spring Framework 6.1: Infrastructure Revisited<\/a> (moja ulubiona sesja) przedstawi\u0142 plany na integracje Wirtualnych W\u0105tk\u00f3w w Spring Framework, ze spor\u0105 ilo\u015bci\u0105 detali. Mn\u00f3stwo miejsca po\u015bwi\u0119cono Jakarta EE 11 i Tomcatowi 10 i w jaki spos\u00f3b te projekty pozwol\u0105 na szybsz\u0105 integracje w Springu. Juergen Hoeller pochyli\u0142 si\u0119 r\u00f3wnie\u017c nad <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1577\">wsp\u00f3\u0142istnieniem Virtual Threads i Spring WebFlux<\/a>. Po raz kolejny dostajemy potwierdzenie, \u017ce Reactive Programming i Wirtualne W\u0105tki (cho\u0107 maj\u0105 elementy przeci\u0119cia) b\u0119d\u0105 raczej stanowi\u0142y dla siebie r\u00f3wnoleg\u0142\u0105 alternatyw\u0119. Nie nale\u017cy si\u0119 spodziewa\u0107, \u017ce Wirtualne W\u0105tki zast\u0105pi\u0105 Reactora &#8211; <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1757\">Spring MVC pozwoli za to na integracje obu podej\u015b\u0107<\/a>, je\u017celi kto\u015b b\u0119dzie mia\u0142 tak\u0105 fantazj\u0119. Og\u00f3lnie, bardzo dobra sesja je\u015bli jeste\u015bcie ciekawi, jakie <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1937\">zalety przyniesie wprowadzenie Wirtualnych W\u0105tk\u00f3w do Springa<\/a>, na nieco g\u0142\u0119bszym poziomie ni\u017c &#8222;b\u0119dzie szybciej&#8221;.<\/p>\n\n\n\n<p>To jednak nie koniec o <a href=\"https:\/\/www.youtube.com\/watch?v=_o7NIaOVjNM\">Spring Framework 6.1: Infrastructure Revisited<\/a>, poniewa\u017c drug\u0105 po\u0142ow\u0119 sesji po\u015bwi\u0119cono integracji CRaC (Coordinated restore at Checkpoint) w Spring Framework. W samego CRaC-a nie b\u0119d\u0119 Was ju\u017c wprowadza\u0142 (mam wra\u017cenie, \u017ce robi\u0119 to w co drugiej edycji, wi\u0119c zapraszam cho\u0107by <a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">do poprzedniej<\/a>). <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=2408\">Juergen Hoeller pokaza\u0142<\/a> jakie dodatkowe wyzwania niesie ze sob\u0105 wdro\u017cenie CRaC-a do Springa, zw\u0142aszcza z punktu widzenia cyklu \u017cycia Bean\u00f3w. To jednak informacja bardziej dla os\u00f3b, kt\u00f3re interesuje co dzieje si\u0119 pod mask\u0105, gdy\u017c z punktu widzenia u\u017cytkownika Springa w wi\u0119kszo\u015bci aplikacji dodatkowe dzia\u0142ania nie powinny by\u0107 potrzebne, a ca\u0142o\u015b\u0107 ma trafi\u0107 do naszych r\u0105k ju\u017c na etapie Spring Boot 3.2, integruj\u0105cego Spring Framework 6.1.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"506\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-3-1024x506.png\" alt=\"\" class=\"wp-image-16063\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-3-1024x506.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-3-300x148.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-3-768x379.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-3-1536x759.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-3-2048x1012.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">A dlaczego warto? Jeszcze podczas S\u00e9bastien Deleuze pokaza\u0142 kilka wykres\u00f3w.<\/figcaption><\/figure>\n\n\n\n<p>Finalne wersje obu projekt\u00f3w powinny pojawi\u0107 si\u0119 jeszcze w listopadzie tego roku. Nowe funkcjonalno\u015bci b\u0119d\u0105 wymaga\u0142y pewnych aktualizacji (JDK 21 dla Wirtualnych W\u0105tk\u00f3w, CRaC jest obecnie wspierany wy\u0142\u0105cznie przez OpenJDK Azul), ale sam Spring Framework 6.x <a href=\"https:\/\/github.com\/spring-projects\/spring-framework\/issues\/23443\">ma pozosta\u0107 kompatybilny z JDK 17+<\/a>.<\/p>\n\n\n\n<p>CRaC jest ju\u017c dzisiaj dost\u0119pny r\u00f3wnie\u017c jako silnik Amazon Lambda SnapStart &#8211; ca\u0142emu projektowi zosta\u0142a po\u015bwi\u0119cona dedykowana sesja <strong><a href=\"https:\/\/www.youtube.com\/watch?v=IIKe2dx9Ag0\">AWS Lambda SnapStart: Dramatically reduce cold starts for your Java functions<\/a><\/strong>.<\/p>\n\n\n\n<p>Ciekawym rozwini\u0119ciem Keynote by\u0142o r\u00f3wnie\u017c <a href=\"https:\/\/www.youtube.com\/watch?v=8umoZWj6UcU\">Going Native: Fast and Lightweight Spring Boot Applications with GraalVM<\/a> Aliny Yurenko. Prezentacja jest \u015bwietnym wprowadzeniem w r\u00f3\u017cnice mi\u0119dzy JIT i AOT, podobnie jak w wypadku <strong>Spring Framework 6.1: Infrastructure Revisited<\/strong> wchodz\u0105c\u0105 nieco g\u0142\u0119biej w specyfiki projekt\u00f3w. Przyk\u0142adowo, w czasie prezentacji po\u015bwi\u0119cono sporo czasu zaletom GraalVM, o kt\u00f3rych nie m\u00f3wi si\u0119 za wiele, jak przyk\u0142adowo <a href=\"https:\/\/youtu.be\/8umoZWj6UcU?t=1629\">uodpornienie aplikacji na r\u00f3\u017cne potencjalne wektory ataku<\/a>. Spora cz\u0119\u015b\u0107 prezentacji po\u015bwi\u0119cona zosta\u0142a na Live Demo prezentuj\u0105ce, jak realnie wygl\u0105da praca z Native Images w Spring Boot. Znalaz\u0142o si\u0119 nawet miejsce na przedstawienie <a href=\"https:\/\/youtu.be\/8umoZWj6UcU?t=2659\">plan\u00f3w na przysz\u0142o\u015b\u0107 i kierunk\u00f3w, w kt\u00f3rym rozwija\u0107 si\u0119 am GraalVM wraz z ca\u0142\u0105 platform\u0105<\/a>. A \u017ce rozpocz\u0119li\u015bmy ca\u0142o\u015b\u0107 od pokazania potencjalnego wp\u0142ywu researchu w community na przysz\u0142o\u015b\u0107 Javy, podrzuc\u0119 <a href=\"https:\/\/medium.com\/graalvm\/graalvm-community-survey-2022-results-328d0404d36e\">te\u017c link do wyniku ankiety przeprowadzonej w\u015br\u00f3d spo\u0142eczno\u015bci GraalVM<\/a>. Alina wspomnia\u0142a o niej podczas Keynote, co po raz kolejny pokazuje, \u017ce wasz g\u0142os ma znaczenie.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"SouthPark &#039;&#039;Vote or Die&#039;&#039; HD Clip\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/9pSh0VAVYn4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><figcaption class=\"wp-element-caption\">Wi\u0119c wiecie, trzeba g\u0142osowa\u0107!<\/figcaption><\/figure>\n\n\n\n<p>To tak \u017ceby ca\u0142o\u015b\u0107 \u0142adnie zako\u0144czy\u0107, przygl\u0105dnijmy si\u0119 r\u00f3wnie\u017c temu, co w nasze r\u0119ce trafi\u0142o ju\u017c w tym momencie &#8211; nowych wersjach springowych projekt\u00f3w.<\/p>\n\n\n\n<p>G\u0142\u00f3wnym daniem jest z pewno\u015bci\u0105 jest <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.1-Release-Notes#new-and-noteworthy\">Spring Boot 3.1<\/a>. Kluczow\u0105 tematyk\u0105 nowego wydania jest konteneryzacja, i to z r\u00f3\u017cnych perspektyw.<\/p>\n\n\n\n<p>Pierwszym, olbrzymim dodatkiem jest wsparcie dla TestContainers. Pewnie wszyscy u\u017cywaj\u0105cy projektu w swoich Spring Bootowych testach mocno si\u0119 na to og\u0142oszenie zdziwili, ale tak naprawd\u0119 m\u00f3wimy tutaj o zupe\u0142nie innym poziomem wsparcia. AtomicJar we wsp\u00f3\u0142pracy ze Springiem wprowadzi\u0142o bowiem mo\u017cliwo\u015b\u0107 u\u017cywania TestContainers r\u00f3wnie\u017c do developmentu. Wygl\u0105da to troch\u0119 jak praca z Docker Compose, z wyj\u0105tkiem tego, \u017ce konfiguracja kontenera jest w Javie, a nie w YAML. Ca\u0142o\u015b\u0107 ma oprze\u0107 si\u0119 na koncepcie obiekt\u00f3w <code>ConnectionDetails<\/code> &#8211; beanach zapewniaj\u0105cych po\u0142\u0105czenie do zewn\u0119trznych serwis\u00f3w. Je\u015bli zostan\u0105 zdefiniowane w projekcie, b\u0119d\u0105 mia\u0142y pierwsze\u0144stwo przed po\u0142\u0105czeniami &#8222;na zewn\u0105trz&#8221;, dzi\u0119ki czemu mo\u017cliwe b\u0119dzie np. przekierowanie po\u0142\u0105cze\u0144 do lokalnej wersji Postgresa, postawionej w tle za pomoc\u0105 TestContainers.<\/p>\n\n\n\n<p>Po drugie, wprowadzono now\u0105 bibliotek\u0119 <code>spring-boot-docker-compose<\/code>, kt\u00f3ra zajmuje si\u0119 obs\u0142ug\u0105 plik\u00f3w Docker Compose w projekcie. Kiedy aplikacja si\u0119 uruchamia, szuka pliku Docker Compose i jego konfiguracji, a nast\u0119pnie tworzy dla nas kontener w oparciu o TestContainers (dla tych kt\u00f3rzy jednak preferuj\u0105 u\u017cywanie YAML-a a nie Javy). Dodatkowo, do\u0142\u0105cza te konfiguracje do naszej lokalnej aplikacji. Oznacza to, \u017ce mo\u017cemy uruchomi\u0107 plik <code>docker-compose.yaml<\/code> w naszym projekcie bez konieczno\u015bci konfigurowania go w <code>application.yaml<\/code>.<\/p>\n\n\n\n<p>Dodatkowo pojawi\u0142a si\u0119 masa aktualizacji zale\u017cno\u015bci, takich jak Hibernate 6.2, Mockito 5 czy Jackson 2.15.<\/p>\n\n\n\n<p>Opr\u00f3cz tego, drobne aktualizacje otrzyma\u0142y r\u00f3wnie\u017c projekty takie jak:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/12\/spring-data-2023-0-goes-ga\">Spring Data (2023.0.0)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/17\/spring-for-graphql-1-2-0-released\">Spring for GraphQL (wersja 1.2.0)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">Spring Security (wersja 6.1)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/17\/spring-authorization-server-1-1-0-available-now\">Spring Authorization Server (wersja 1.1)<\/a><\/li>\n<\/ul>\n\n\n\n<p>Zmiany zachodz\u0105ce w nich s\u0105 jednak nieco mniejsze, dlatego zach\u0119cam do zerkni\u0119cia do oryginalnych Release Notes.<\/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\/2023\/06\/FeelsOldYet.png\" alt=\"\" class=\"wp-image-16052\" width=\"768\" height=\"450\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/FeelsOldYet.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/FeelsOldYet-300x176.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/FeelsOldYet-768x450.png 768w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><figcaption class=\"wp-element-caption\">BTW: Wiecie, \u017ce Spring Boot ma ju\u017c prawie dziesi\u0119\u0107 lat? Poczu\u0142em si\u0119 staro.<\/figcaption><\/figure><\/div>","protected":false},"excerpt":{"rendered":"<p>Po tygodniu przerwy, dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na Spring I\/O, po drodze zahaczaj\u0105c o interesuj\u0105cy temat zkonteneryzowanej Javy.<\/p>\n","protected":false},"author":10,"featured_media":16079,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-16050","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm"],"acf":{"estimated_reading_time":"7","feature_image_blog":{"ID":16080,"id":16080,"title":"JVM Weekly 1200x628_V2","filename":"JVM-Weekly-1200x628_V2.png","filesize":650756,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","link":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/jvm-weekly-1200x628_v2-36-2\/","alt":"","author":"10","description":"","caption":"","name":"jvm-weekly-1200x628_v2-36-2","status":"inherit","uploaded_to":16050,"date":"2023-06-02 11:59:25","modified":"2023-06-02 12:03:49","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1200,"height":628,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2-300x157.png","medium-width":300,"medium-height":157,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2-768x402.png","medium_large-width":768,"medium_large-height":402,"large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2-1024x536.png","large-width":1024,"large-height":536,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","1536x1536-width":1200,"1536x1536-height":628,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","2048x2048-width":1200,"2048x2048-height":628,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":157,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","gform-image-choice-md-width":400,"gform-image-choice-md-height":209,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":314}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.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>Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 - JVM Weekly vol. 137 - 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\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 - JVM Weekly vol. 137 - Vived\" \/>\n<meta property=\"og:description\" content=\"Po tygodniu przerwy, dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na Spring I\/O, po drodze zahaczaj\u0105c o interesuj\u0105cy temat zkonteneryzowanej Javy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-02T12:03:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-03T06:24:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.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\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 &#8211; JVM Weekly vol. 137\",\"datePublished\":\"2023-06-02T12:03:23+00:00\",\"dateModified\":\"2023-06-03T06:24:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/\"},\"wordCount\":1599,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/\",\"url\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/\",\"name\":\"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 - JVM Weekly vol. 137 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png\",\"datePublished\":\"2023-06-02T12:03:23+00:00\",\"dateModified\":\"2023-06-03T06:24:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 &#8211; JVM Weekly vol. 137\"}]},{\"@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":"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 - JVM Weekly vol. 137 - 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\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/","og_locale":"pl_PL","og_type":"article","og_title":"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 - JVM Weekly vol. 137 - Vived","og_description":"Po tygodniu przerwy, dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na Spring I\/O, po drodze zahaczaj\u0105c o interesuj\u0105cy temat zkonteneryzowanej Javy.","og_url":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/","og_site_name":"Vived","article_published_time":"2023-06-02T12:03:23+00:00","article_modified_time":"2023-06-03T06:24:49+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.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\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 &#8211; JVM Weekly vol. 137","datePublished":"2023-06-02T12:03:23+00:00","dateModified":"2023-06-03T06:24:49+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/"},"wordCount":1599,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/","url":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/","name":"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 - JVM Weekly vol. 137 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","datePublished":"2023-06-02T12:03:23+00:00","dateModified":"2023-06-03T06:24:49+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/JVM-Weekly-1200x628_V2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/wirtualne-watki-crac-graalvm-spring-boot-3-1-co-przyniosl-spring-i-o-2023-jvm-weekly-vol-137\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1: co przyni\u00f3s\u0142 Spring I\/O 2023 &#8211; JVM Weekly vol. 137"}]},{"@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\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">1. Java mo\u017ce dosta\u0107 dedykowany profil wydajno\u015bciowy na potrzeby konteneryzacji<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. Java mo\u017ce dosta\u0107 dedykowany profil wydajno\u015bciowy na potrzeby konteneryzacji<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wielokrotnie spotykam si\u0119 z pewnym sceptycyzmem je\u015bli chodzi o raporty bran\u017cowe, prezentuj\u0105ce statystyki poszczeg\u00f3lnych wersji. \"A po co to komu\", \"z\u0142a metodyka\", \"grupa niereprezentatywna\" to tylko cz\u0119\u015b\u0107 z komentarzy, kt\u00f3re mo\u017cna znale\u017a\u0107 w sieci. Jednocze\u015bnie jednak warto czasem po\u015bwi\u0119ci\u0107 tego typu badaniom troch\u0119 wi\u0119cej miejsca. Par\u0119 tygodni temu <a href=\"https:\/\/vived.substack.com\/i\/119451377\/amazon-is-pushing-ever-wider-with-its-jdk\">mia\u0142em okazj\u0119 podzieli\u0107 si\u0119 z Wami dwoma raportami<\/a>, odpowiednio od Vaadina oraz New Relica. O ile o pierwszym chyba ju\u017c wszyscy zapomnieli (Enterprise Java, kt\u00f3rej by\u0142 po\u015bwi\u0119cony, nie jest najbardziej \"sexy\" tematem na \u015bwiecie), to publikacja \"The State of Java Ecosystem 2023\" okazuje si\u0119 mie\u0107 szanse na nieco szersze reperkusje, ni\u017c ktokolwiek m\u00f3g\u0142 si\u0119 spodziewa\u0107.<\/p>\n","innerContent":["\n<p>Wielokrotnie spotykam si\u0119 z pewnym sceptycyzmem je\u015bli chodzi o raporty bran\u017cowe, prezentuj\u0105ce statystyki poszczeg\u00f3lnych wersji. \"A po co to komu\", \"z\u0142a metodyka\", \"grupa niereprezentatywna\" to tylko cz\u0119\u015b\u0107 z komentarzy, kt\u00f3re mo\u017cna znale\u017a\u0107 w sieci. Jednocze\u015bnie jednak warto czasem po\u015bwi\u0119ci\u0107 tego typu badaniom troch\u0119 wi\u0119cej miejsca. Par\u0119 tygodni temu <a href=\"https:\/\/vived.substack.com\/i\/119451377\/amazon-is-pushing-ever-wider-with-its-jdk\">mia\u0142em okazj\u0119 podzieli\u0107 si\u0119 z Wami dwoma raportami<\/a>, odpowiednio od Vaadina oraz New Relica. O ile o pierwszym chyba ju\u017c wszyscy zapomnieli (Enterprise Java, kt\u00f3rej by\u0142 po\u015bwi\u0119cony, nie jest najbardziej \"sexy\" tematem na \u015bwiecie), to publikacja \"The State of Java Ecosystem 2023\" okazuje si\u0119 mie\u0107 szanse na nieco szersze reperkusje, ni\u017c ktokolwiek m\u00f3g\u0142 si\u0119 spodziewa\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16076,"width":512,"height":297,"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\/2023\/06\/image-5-1024x593.png\" alt=\"\" class=\"wp-image-16076\" width=\"512\" height=\"297\"\/><figcaption class=\"wp-element-caption\">Tak, tego si\u0119 nie spodziewa\u0142em<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-5-1024x593.png\" alt=\"\" class=\"wp-image-16076\" width=\"512\" height=\"297\"\/><figcaption class=\"wp-element-caption\">Tak, tego si\u0119 nie spodziewa\u0142em<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ludzie odpowiadaj\u0105cy za Jav\u0119 w Microsofcie <a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-dev\/2023-May\/074325.html\">poinformowali ostatnio<\/a>, \u017ce pracuj\u0105 nad JEP-em maj\u0105cym wprowadzi\u0107 Profile Ergonomiki do Java Virtual Machine (JVM). Ta funkcja umo\u017cliwi\u0142aby posiadanie w Javie dw\u00f3ch r\u00f3\u017cnych konfiguracji: profilu 'wsp\u00f3\u0142dzielonego', zaprojektowany z za\u0142o\u017ceniem, \u017ce JVM musi dzieli\u0107 zasoby z innymi procesami, oraz profil 'dedykowany' dla system\u00f3w, kt\u00f3re dedykuj\u0105 zasoby wy\u0142\u0105cznie dla procesu JVM i ta mo\u017ce bra\u0107 tyle, ile fabryka da\u0142a. Ten ruch jest motywowany wspomnianymi danymi od New Relic, kt\u00f3re pokazuj\u0105, \u017ce ponad 70% monitorowanych przez nich JVM dzia\u0142a w dedykowanych \u015brodowiskach, takich jak kontenery, bardzo cz\u0119sto bez \u017cadnej konfiguracji, a wi\u0119c bardzo niewydajnie.<\/p>\n","innerContent":["\n<p>Ludzie odpowiadaj\u0105cy za Jav\u0119 w Microsofcie <a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-dev\/2023-May\/074325.html\">poinformowali ostatnio<\/a>, \u017ce pracuj\u0105 nad JEP-em maj\u0105cym wprowadzi\u0107 Profile Ergonomiki do Java Virtual Machine (JVM). Ta funkcja umo\u017cliwi\u0142aby posiadanie w Javie dw\u00f3ch r\u00f3\u017cnych konfiguracji: profilu 'wsp\u00f3\u0142dzielonego', zaprojektowany z za\u0142o\u017ceniem, \u017ce JVM musi dzieli\u0107 zasoby z innymi procesami, oraz profil 'dedykowany' dla system\u00f3w, kt\u00f3re dedykuj\u0105 zasoby wy\u0142\u0105cznie dla procesu JVM i ta mo\u017ce bra\u0107 tyle, ile fabryka da\u0142a. Ten ruch jest motywowany wspomnianymi danymi od New Relic, kt\u00f3re pokazuj\u0105, \u017ce ponad 70% monitorowanych przez nich JVM dzia\u0142a w dedykowanych \u015brodowiskach, takich jak kontenery, bardzo cz\u0119sto bez \u017cadnej konfiguracji, a wi\u0119c bardzo niewydajnie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Proponowany profil 'dedykowany' ma na celu umo\u017cliwienie JVM bardziej efektywnego wykorzystania dost\u0119pnych zasob\u00f3w, szczeg\u00f3lnie w dedykowanych \u015brodowiskach. Na przyk\u0142ad, w przeciwie\u0144stwie do obecnych \"default\u00f3w\", gdzie maksymalny rozmiar sterty JVM waha si\u0119 mi\u0119dzy 25% a 50% w zale\u017cno\u015bci od dost\u0119pnego rozmiaru pami\u0119ci, nowy profil m\u00f3g\u0142by zwi\u0119kszy\u0107 domy\u015blne przydzielanie rozmiaru sterty do 60%-70%. Ponadto zawiera\u0142by r\u00f3wnie\u017c inne heurystyki co do wyboru GC, liczenia aktywnych procesor\u00f3w i rozmiar\u00f3w wewn\u0119trznych pul w\u0105tk\u00f3w JVM. Poza wprowadzeniem dw\u00f3ch pierwszych, wspomnianych profili, JEP ma wprowadzi\u0107 struktury umo\u017cliwiaj\u0105ce rozszerzanie OpenJDK o wi\u0119cej profili. Teraz na razie jednak czekamy na wi\u0119cej, poniewa\u017c prace dopiero zosta\u0142y zapowiedziane szerszej spo\u0142eczno\u015bci.<\/p>\n","innerContent":["\n<p>Proponowany profil 'dedykowany' ma na celu umo\u017cliwienie JVM bardziej efektywnego wykorzystania dost\u0119pnych zasob\u00f3w, szczeg\u00f3lnie w dedykowanych \u015brodowiskach. Na przyk\u0142ad, w przeciwie\u0144stwie do obecnych \"default\u00f3w\", gdzie maksymalny rozmiar sterty JVM waha si\u0119 mi\u0119dzy 25% a 50% w zale\u017cno\u015bci od dost\u0119pnego rozmiaru pami\u0119ci, nowy profil m\u00f3g\u0142by zwi\u0119kszy\u0107 domy\u015blne przydzielanie rozmiaru sterty do 60%-70%. Ponadto zawiera\u0142by r\u00f3wnie\u017c inne heurystyki co do wyboru GC, liczenia aktywnych procesor\u00f3w i rozmiar\u00f3w wewn\u0119trznych pul w\u0105tk\u00f3w JVM. Poza wprowadzeniem dw\u00f3ch pierwszych, wspomnianych profili, JEP ma wprowadzi\u0107 struktury umo\u017cliwiaj\u0105ce rozszerzanie OpenJDK o wi\u0119cej profili. Teraz na razie jednak czekamy na wi\u0119cej, poniewa\u017c prace dopiero zosta\u0142y zapowiedziane szerszej spo\u0142eczno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale \"Ergonomic Profiles\" by\u0142y tylko dodatkiem (cho\u0107 od tematu konteneryzacji nie uciekniemy, jeszcze wr\u00f3ci). Przejd\u017amy do prawdziwego mi\u0119ska.<\/p>\n","innerContent":["\n<p>Ale \"Ergonomic Profiles\" by\u0142y tylko dodatkiem (cho\u0107 od tematu konteneryzacji nie uciekniemy, jeszcze wr\u00f3ci). Przejd\u017amy do prawdziwego mi\u0119ska.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16058,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-1.png\" alt=\"\" class=\"wp-image-16058\"\/><figcaption class=\"wp-element-caption\">Tak, we wtorek wychodzi Diablo. Tak, wiem \u017ce albo wiecie albo nie pytali\u015bcie \ud83d\ude48<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-1.png\" alt=\"\" class=\"wp-image-16058\"\/><figcaption class=\"wp-element-caption\">Tak, we wtorek wychodzi Diablo. Tak, wiem \u017ce albo wiecie albo nie pytali\u015bcie \ud83d\ude48<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1 - co ciekawego przyni\u00f3s\u0142 Spring I\/O 2023<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Wirtualne W\u0105tki, CRaC, GraalVM, Spring Boot 3.1 - co ciekawego przyni\u00f3s\u0142 Spring I\/O 2023<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ja wiem, \u017ce ju\u017c wszyscy pewnie zapomnieli, ale w po\u0142owie maja odby\u0142 si\u0119 Spring I\/O 2023. Dla tych kt\u00f3rzy (tak jak ja, niestety) nie mieli okazji odwiedzi\u0107 s\u0142onecznej Barcelony, <a href=\"https:\/\/www.youtube.com\/watch?v=IgmeFeTU1a4\">na oficjalnym kanale konferencji pojawi\u0142y si\u0119 nagrania talk\u00f3w<\/a>. Dlatego te\u017c wreszcie teraz, gdy ju\u017c ka\u017cdy mo\u017ce ogl\u0105dn\u0105\u0107 sobie konferencje nie z ze swojego pokoju, mo\u017cemy si\u0119 skupi\u0107 na przygl\u0105dni\u0119ciu tego, co zosta\u0142o pokazane.<\/p>\n","innerContent":["\n<p>Ja wiem, \u017ce ju\u017c wszyscy pewnie zapomnieli, ale w po\u0142owie maja odby\u0142 si\u0119 Spring I\/O 2023. Dla tych kt\u00f3rzy (tak jak ja, niestety) nie mieli okazji odwiedzi\u0107 s\u0142onecznej Barcelony, <a href=\"https:\/\/www.youtube.com\/watch?v=IgmeFeTU1a4\">na oficjalnym kanale konferencji pojawi\u0142y si\u0119 nagrania talk\u00f3w<\/a>. Dlatego te\u017c wreszcie teraz, gdy ju\u017c ka\u017cdy mo\u017ce ogl\u0105dn\u0105\u0107 sobie konferencje nie z ze swojego pokoju, mo\u017cemy si\u0119 skupi\u0107 na przygl\u0105dni\u0119ciu tego, co zosta\u0142o pokazane.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy od Keynote, kt\u00f3rego mo\u017cna potraktowa\u0107 jako Spis Tre\u015bci. Podczas niego <a href=\"https:\/\/twitter.com\/springjuergen\">Juergen Hoeller<\/a> - project lead Spring Frameworku - zapowiedzia\u0142 nadchodz\u0105ce wydania Spring Framework 6.1 i Spring Boot 3.2 oraz nowo\u015bci, kt\u00f3re przyjd\u0105 ze zbli\u017caj\u0105cym si\u0119 wydaniem, takie jak wirtualne w\u0105tkach (min. przez prace nad modernizacj\u0105 stosu servlet\u00f3w). Na scenie pojawi\u0142a si\u0119 te\u017c pracuj\u0105cy nad Springiem <a href=\"https:\/\/twitter.com\/sdeleuze\">S\u00e9bastien Deleuze<\/a> oraz <a href=\"https:\/\/twitter.com\/alina_yurenko\">Alina Yurenko<\/a>, Developer Advocate GraalVM, kt\u00f3rzy opowiadali o tym, jak wielk\u0105 rewolucj\u0105 dla projektu by\u0142o Spring Boot Native Image w celu szybszego uruchamiania i mniejszego zu\u017cycia zasob\u00f3w. Na scenie pokazano nam Spring Cloud Function, czyli pr\u00f3b\u0119 wej\u015bcia Springa w rynek Serverless. S\u00e9bastien dodatkowo opowiedzia\u0142 te\u017c o CRaC-u i przychodz\u0105cymi z nim nowych mo\u017cliwo\u015bciach. Na scenie nie mog\u0142o zabrakn\u0105\u0107 te\u017c&nbsp;<a href=\"https:\/\/twitter.com\/starbuxman\">Josha Longa<\/a>, Spring Developer Advocate, kt\u00f3ry pokazywa\u0142 nowe mo\u017cliwo\u015bci Spring Boot 3.1.<\/p>\n","innerContent":["\n<p>Zacznijmy od Keynote, kt\u00f3rego mo\u017cna potraktowa\u0107 jako Spis Tre\u015bci. Podczas niego <a href=\"https:\/\/twitter.com\/springjuergen\">Juergen Hoeller<\/a> - project lead Spring Frameworku - zapowiedzia\u0142 nadchodz\u0105ce wydania Spring Framework 6.1 i Spring Boot 3.2 oraz nowo\u015bci, kt\u00f3re przyjd\u0105 ze zbli\u017caj\u0105cym si\u0119 wydaniem, takie jak wirtualne w\u0105tkach (min. przez prace nad modernizacj\u0105 stosu servlet\u00f3w). Na scenie pojawi\u0142a si\u0119 te\u017c pracuj\u0105cy nad Springiem <a href=\"https:\/\/twitter.com\/sdeleuze\">S\u00e9bastien Deleuze<\/a> oraz <a href=\"https:\/\/twitter.com\/alina_yurenko\">Alina Yurenko<\/a>, Developer Advocate GraalVM, kt\u00f3rzy opowiadali o tym, jak wielk\u0105 rewolucj\u0105 dla projektu by\u0142o Spring Boot Native Image w celu szybszego uruchamiania i mniejszego zu\u017cycia zasob\u00f3w. Na scenie pokazano nam Spring Cloud Function, czyli pr\u00f3b\u0119 wej\u015bcia Springa w rynek Serverless. S\u00e9bastien dodatkowo opowiedzia\u0142 te\u017c o CRaC-u i przychodz\u0105cymi z nim nowych mo\u017cliwo\u015bciach. Na scenie nie mog\u0142o zabrakn\u0105\u0107 te\u017c&nbsp;<a href=\"https:\/\/twitter.com\/starbuxman\">Josha Longa<\/a>, Spring Developer Advocate, kt\u00f3ry pokazywa\u0142 nowe mo\u017cliwo\u015bci Spring Boot 3.1.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A teraz rozpakujemy sobie te tematy, w\u0142a\u015bciwie bowiem ka\u017cdy z poruszonych na Keynote dosta\u0142 sw\u00f3j followup.<\/p>\n","innerContent":["\n<p>A teraz rozpakujemy sobie te tematy, w\u0142a\u015bciwie bowiem ka\u017cdy z poruszonych na Keynote dosta\u0142 sw\u00f3j followup.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przyk\u0142adowo, podczas <a href=\"https:\/\/www.youtube.com\/watch?v=_o7NIaOVjNM\">Spring Framework 6.1: Infrastructure Revisited<\/a> (moja ulubiona sesja) przedstawi\u0142 plany na integracje Wirtualnych W\u0105tk\u00f3w w Spring Framework, ze spor\u0105 ilo\u015bci\u0105 detali. Mn\u00f3stwo miejsca po\u015bwi\u0119cono Jakarta EE 11 i Tomcatowi 10 i w jaki spos\u00f3b te projekty pozwol\u0105 na szybsz\u0105 integracje w Springu. Juergen Hoeller pochyli\u0142 si\u0119 r\u00f3wnie\u017c nad <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1577\">wsp\u00f3\u0142istnieniem Virtual Threads i Spring WebFlux<\/a>. Po raz kolejny dostajemy potwierdzenie, \u017ce Reactive Programming i Wirtualne W\u0105tki (cho\u0107 maj\u0105 elementy przeci\u0119cia) b\u0119d\u0105 raczej stanowi\u0142y dla siebie r\u00f3wnoleg\u0142\u0105 alternatyw\u0119. Nie nale\u017cy si\u0119 spodziewa\u0107, \u017ce Wirtualne W\u0105tki zast\u0105pi\u0105 Reactora - <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1757\">Spring MVC pozwoli za to na integracje obu podej\u015b\u0107<\/a>, je\u017celi kto\u015b b\u0119dzie mia\u0142 tak\u0105 fantazj\u0119. Og\u00f3lnie, bardzo dobra sesja je\u015bli jeste\u015bcie ciekawi, jakie <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1937\">zalety przyniesie wprowadzenie Wirtualnych W\u0105tk\u00f3w do Springa<\/a>, na nieco g\u0142\u0119bszym poziomie ni\u017c \"b\u0119dzie szybciej\".<\/p>\n","innerContent":["\n<p>Przyk\u0142adowo, podczas <a href=\"https:\/\/www.youtube.com\/watch?v=_o7NIaOVjNM\">Spring Framework 6.1: Infrastructure Revisited<\/a> (moja ulubiona sesja) przedstawi\u0142 plany na integracje Wirtualnych W\u0105tk\u00f3w w Spring Framework, ze spor\u0105 ilo\u015bci\u0105 detali. Mn\u00f3stwo miejsca po\u015bwi\u0119cono Jakarta EE 11 i Tomcatowi 10 i w jaki spos\u00f3b te projekty pozwol\u0105 na szybsz\u0105 integracje w Springu. Juergen Hoeller pochyli\u0142 si\u0119 r\u00f3wnie\u017c nad <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1577\">wsp\u00f3\u0142istnieniem Virtual Threads i Spring WebFlux<\/a>. Po raz kolejny dostajemy potwierdzenie, \u017ce Reactive Programming i Wirtualne W\u0105tki (cho\u0107 maj\u0105 elementy przeci\u0119cia) b\u0119d\u0105 raczej stanowi\u0142y dla siebie r\u00f3wnoleg\u0142\u0105 alternatyw\u0119. Nie nale\u017cy si\u0119 spodziewa\u0107, \u017ce Wirtualne W\u0105tki zast\u0105pi\u0105 Reactora - <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1757\">Spring MVC pozwoli za to na integracje obu podej\u015b\u0107<\/a>, je\u017celi kto\u015b b\u0119dzie mia\u0142 tak\u0105 fantazj\u0119. Og\u00f3lnie, bardzo dobra sesja je\u015bli jeste\u015bcie ciekawi, jakie <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=1937\">zalety przyniesie wprowadzenie Wirtualnych W\u0105tk\u00f3w do Springa<\/a>, na nieco g\u0142\u0119bszym poziomie ni\u017c \"b\u0119dzie szybciej\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie koniec o <a href=\"https:\/\/www.youtube.com\/watch?v=_o7NIaOVjNM\">Spring Framework 6.1: Infrastructure Revisited<\/a>, poniewa\u017c drug\u0105 po\u0142ow\u0119 sesji po\u015bwi\u0119cono integracji CRaC (Coordinated restore at Checkpoint) w Spring Framework. W samego CRaC-a nie b\u0119d\u0119 Was ju\u017c wprowadza\u0142 (mam wra\u017cenie, \u017ce robi\u0119 to w co drugiej edycji, wi\u0119c zapraszam cho\u0107by <a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">do poprzedniej<\/a>). <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=2408\">Juergen Hoeller pokaza\u0142<\/a> jakie dodatkowe wyzwania niesie ze sob\u0105 wdro\u017cenie CRaC-a do Springa, zw\u0142aszcza z punktu widzenia cyklu \u017cycia Bean\u00f3w. To jednak informacja bardziej dla os\u00f3b, kt\u00f3re interesuje co dzieje si\u0119 pod mask\u0105, gdy\u017c z punktu widzenia u\u017cytkownika Springa w wi\u0119kszo\u015bci aplikacji dodatkowe dzia\u0142ania nie powinny by\u0107 potrzebne, a ca\u0142o\u015b\u0107 ma trafi\u0107 do naszych r\u0105k ju\u017c na etapie Spring Boot 3.2, integruj\u0105cego Spring Framework 6.1.<\/p>\n","innerContent":["\n<p>To jednak nie koniec o <a href=\"https:\/\/www.youtube.com\/watch?v=_o7NIaOVjNM\">Spring Framework 6.1: Infrastructure Revisited<\/a>, poniewa\u017c drug\u0105 po\u0142ow\u0119 sesji po\u015bwi\u0119cono integracji CRaC (Coordinated restore at Checkpoint) w Spring Framework. W samego CRaC-a nie b\u0119d\u0119 Was ju\u017c wprowadza\u0142 (mam wra\u017cenie, \u017ce robi\u0119 to w co drugiej edycji, wi\u0119c zapraszam cho\u0107by <a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">do poprzedniej<\/a>). <a href=\"https:\/\/youtu.be\/_o7NIaOVjNM?t=2408\">Juergen Hoeller pokaza\u0142<\/a> jakie dodatkowe wyzwania niesie ze sob\u0105 wdro\u017cenie CRaC-a do Springa, zw\u0142aszcza z punktu widzenia cyklu \u017cycia Bean\u00f3w. To jednak informacja bardziej dla os\u00f3b, kt\u00f3re interesuje co dzieje si\u0119 pod mask\u0105, gdy\u017c z punktu widzenia u\u017cytkownika Springa w wi\u0119kszo\u015bci aplikacji dodatkowe dzia\u0142ania nie powinny by\u0107 potrzebne, a ca\u0142o\u015b\u0107 ma trafi\u0107 do naszych r\u0105k ju\u017c na etapie Spring Boot 3.2, integruj\u0105cego Spring Framework 6.1.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":16063,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-3-1024x506.png\" alt=\"\" class=\"wp-image-16063\"\/><figcaption class=\"wp-element-caption\">A dlaczego warto? Jeszcze podczas S\u00e9bastien Deleuze pokaza\u0142 kilka wykres\u00f3w.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/image-3-1024x506.png\" alt=\"\" class=\"wp-image-16063\"\/><figcaption class=\"wp-element-caption\">A dlaczego warto? Jeszcze podczas S\u00e9bastien Deleuze pokaza\u0142 kilka wykres\u00f3w.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Finalne wersje obu projekt\u00f3w powinny pojawi\u0107 si\u0119 jeszcze w listopadzie tego roku. Nowe funkcjonalno\u015bci b\u0119d\u0105 wymaga\u0142y pewnych aktualizacji (JDK 21 dla Wirtualnych W\u0105tk\u00f3w, CRaC jest obecnie wspierany wy\u0142\u0105cznie przez OpenJDK Azul), ale sam Spring Framework 6.x <a href=\"https:\/\/github.com\/spring-projects\/spring-framework\/issues\/23443\">ma pozosta\u0107 kompatybilny z JDK 17+<\/a>.<\/p>\n","innerContent":["\n<p>Finalne wersje obu projekt\u00f3w powinny pojawi\u0107 si\u0119 jeszcze w listopadzie tego roku. Nowe funkcjonalno\u015bci b\u0119d\u0105 wymaga\u0142y pewnych aktualizacji (JDK 21 dla Wirtualnych W\u0105tk\u00f3w, CRaC jest obecnie wspierany wy\u0142\u0105cznie przez OpenJDK Azul), ale sam Spring Framework 6.x <a href=\"https:\/\/github.com\/spring-projects\/spring-framework\/issues\/23443\">ma pozosta\u0107 kompatybilny z JDK 17+<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>CRaC jest ju\u017c dzisiaj dost\u0119pny r\u00f3wnie\u017c jako silnik Amazon Lambda SnapStart - ca\u0142emu projektowi zosta\u0142a po\u015bwi\u0119cona dedykowana sesja <strong><a href=\"https:\/\/www.youtube.com\/watch?v=IIKe2dx9Ag0\">AWS Lambda SnapStart: Dramatically reduce cold starts for your Java functions<\/a><\/strong>.<\/p>\n","innerContent":["\n<p>CRaC jest ju\u017c dzisiaj dost\u0119pny r\u00f3wnie\u017c jako silnik Amazon Lambda SnapStart - ca\u0142emu projektowi zosta\u0142a po\u015bwi\u0119cona dedykowana sesja <strong><a href=\"https:\/\/www.youtube.com\/watch?v=IIKe2dx9Ag0\">AWS Lambda SnapStart: Dramatically reduce cold starts for your Java functions<\/a><\/strong>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ciekawym rozwini\u0119ciem Keynote by\u0142o r\u00f3wnie\u017c <a href=\"https:\/\/www.youtube.com\/watch?v=8umoZWj6UcU\">Going Native: Fast and Lightweight Spring Boot Applications with GraalVM<\/a> Aliny Yurenko. Prezentacja jest \u015bwietnym wprowadzeniem w r\u00f3\u017cnice mi\u0119dzy JIT i AOT, podobnie jak w wypadku <strong>Spring Framework 6.1: Infrastructure Revisited<\/strong> wchodz\u0105c\u0105 nieco g\u0142\u0119biej w specyfiki projekt\u00f3w. Przyk\u0142adowo, w czasie prezentacji po\u015bwi\u0119cono sporo czasu zaletom GraalVM, o kt\u00f3rych nie m\u00f3wi si\u0119 za wiele, jak przyk\u0142adowo <a href=\"https:\/\/youtu.be\/8umoZWj6UcU?t=1629\">uodpornienie aplikacji na r\u00f3\u017cne potencjalne wektory ataku<\/a>. Spora cz\u0119\u015b\u0107 prezentacji po\u015bwi\u0119cona zosta\u0142a na Live Demo prezentuj\u0105ce, jak realnie wygl\u0105da praca z Native Images w Spring Boot. Znalaz\u0142o si\u0119 nawet miejsce na przedstawienie <a href=\"https:\/\/youtu.be\/8umoZWj6UcU?t=2659\">plan\u00f3w na przysz\u0142o\u015b\u0107 i kierunk\u00f3w, w kt\u00f3rym rozwija\u0107 si\u0119 am GraalVM wraz z ca\u0142\u0105 platform\u0105<\/a>. A \u017ce rozpocz\u0119li\u015bmy ca\u0142o\u015b\u0107 od pokazania potencjalnego wp\u0142ywu researchu w community na przysz\u0142o\u015b\u0107 Javy, podrzuc\u0119 <a href=\"https:\/\/medium.com\/graalvm\/graalvm-community-survey-2022-results-328d0404d36e\">te\u017c link do wyniku ankiety przeprowadzonej w\u015br\u00f3d spo\u0142eczno\u015bci GraalVM<\/a>. Alina wspomnia\u0142a o niej podczas Keynote, co po raz kolejny pokazuje, \u017ce wasz g\u0142os ma znaczenie.<\/p>\n","innerContent":["\n<p>Ciekawym rozwini\u0119ciem Keynote by\u0142o r\u00f3wnie\u017c <a href=\"https:\/\/www.youtube.com\/watch?v=8umoZWj6UcU\">Going Native: Fast and Lightweight Spring Boot Applications with GraalVM<\/a> Aliny Yurenko. Prezentacja jest \u015bwietnym wprowadzeniem w r\u00f3\u017cnice mi\u0119dzy JIT i AOT, podobnie jak w wypadku <strong>Spring Framework 6.1: Infrastructure Revisited<\/strong> wchodz\u0105c\u0105 nieco g\u0142\u0119biej w specyfiki projekt\u00f3w. Przyk\u0142adowo, w czasie prezentacji po\u015bwi\u0119cono sporo czasu zaletom GraalVM, o kt\u00f3rych nie m\u00f3wi si\u0119 za wiele, jak przyk\u0142adowo <a href=\"https:\/\/youtu.be\/8umoZWj6UcU?t=1629\">uodpornienie aplikacji na r\u00f3\u017cne potencjalne wektory ataku<\/a>. Spora cz\u0119\u015b\u0107 prezentacji po\u015bwi\u0119cona zosta\u0142a na Live Demo prezentuj\u0105ce, jak realnie wygl\u0105da praca z Native Images w Spring Boot. Znalaz\u0142o si\u0119 nawet miejsce na przedstawienie <a href=\"https:\/\/youtu.be\/8umoZWj6UcU?t=2659\">plan\u00f3w na przysz\u0142o\u015b\u0107 i kierunk\u00f3w, w kt\u00f3rym rozwija\u0107 si\u0119 am GraalVM wraz z ca\u0142\u0105 platform\u0105<\/a>. A \u017ce rozpocz\u0119li\u015bmy ca\u0142o\u015b\u0107 od pokazania potencjalnego wp\u0142ywu researchu w community na przysz\u0142o\u015b\u0107 Javy, podrzuc\u0119 <a href=\"https:\/\/medium.com\/graalvm\/graalvm-community-survey-2022-results-328d0404d36e\">te\u017c link do wyniku ankiety przeprowadzonej w\u015br\u00f3d spo\u0142eczno\u015bci GraalVM<\/a>. Alina wspomnia\u0142a o niej podczas Keynote, co po raz kolejny pokazuje, \u017ce wasz g\u0142os ma znaczenie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=9pSh0VAVYn4","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=9pSh0VAVYn4\n<\/div><figcaption class=\"wp-element-caption\">Wi\u0119c wiecie, trzeba g\u0142osowa\u0107!<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=9pSh0VAVYn4\n<\/div><figcaption class=\"wp-element-caption\">Wi\u0119c wiecie, trzeba g\u0142osowa\u0107!<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To tak \u017ceby ca\u0142o\u015b\u0107 \u0142adnie zako\u0144czy\u0107, przygl\u0105dnijmy si\u0119 r\u00f3wnie\u017c temu, co w nasze r\u0119ce trafi\u0142o ju\u017c w tym momencie - nowych wersjach springowych projekt\u00f3w.<\/p>\n","innerContent":["\n<p>To tak \u017ceby ca\u0142o\u015b\u0107 \u0142adnie zako\u0144czy\u0107, przygl\u0105dnijmy si\u0119 r\u00f3wnie\u017c temu, co w nasze r\u0119ce trafi\u0142o ju\u017c w tym momencie - nowych wersjach springowych projekt\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>G\u0142\u00f3wnym daniem jest z pewno\u015bci\u0105 jest <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.1-Release-Notes#new-and-noteworthy\">Spring Boot 3.1<\/a>. Kluczow\u0105 tematyk\u0105 nowego wydania jest konteneryzacja, i to z r\u00f3\u017cnych perspektyw.<\/p>\n","innerContent":["\n<p>G\u0142\u00f3wnym daniem jest z pewno\u015bci\u0105 jest <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.1-Release-Notes#new-and-noteworthy\">Spring Boot 3.1<\/a>. Kluczow\u0105 tematyk\u0105 nowego wydania jest konteneryzacja, i to z r\u00f3\u017cnych perspektyw.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pierwszym, olbrzymim dodatkiem jest wsparcie dla TestContainers. Pewnie wszyscy u\u017cywaj\u0105cy projektu w swoich Spring Bootowych testach mocno si\u0119 na to og\u0142oszenie zdziwili, ale tak naprawd\u0119 m\u00f3wimy tutaj o zupe\u0142nie innym poziomem wsparcia. AtomicJar we wsp\u00f3\u0142pracy ze Springiem wprowadzi\u0142o bowiem mo\u017cliwo\u015b\u0107 u\u017cywania TestContainers r\u00f3wnie\u017c do developmentu. Wygl\u0105da to troch\u0119 jak praca z Docker Compose, z wyj\u0105tkiem tego, \u017ce konfiguracja kontenera jest w Javie, a nie w YAML. Ca\u0142o\u015b\u0107 ma oprze\u0107 si\u0119 na koncepcie obiekt\u00f3w <code>ConnectionDetails<\/code> - beanach zapewniaj\u0105cych po\u0142\u0105czenie do zewn\u0119trznych serwis\u00f3w. Je\u015bli zostan\u0105 zdefiniowane w projekcie, b\u0119d\u0105 mia\u0142y pierwsze\u0144stwo przed po\u0142\u0105czeniami \"na zewn\u0105trz\", dzi\u0119ki czemu mo\u017cliwe b\u0119dzie np. przekierowanie po\u0142\u0105cze\u0144 do lokalnej wersji Postgresa, postawionej w tle za pomoc\u0105 TestContainers.<\/p>\n","innerContent":["\n<p>Pierwszym, olbrzymim dodatkiem jest wsparcie dla TestContainers. Pewnie wszyscy u\u017cywaj\u0105cy projektu w swoich Spring Bootowych testach mocno si\u0119 na to og\u0142oszenie zdziwili, ale tak naprawd\u0119 m\u00f3wimy tutaj o zupe\u0142nie innym poziomem wsparcia. AtomicJar we wsp\u00f3\u0142pracy ze Springiem wprowadzi\u0142o bowiem mo\u017cliwo\u015b\u0107 u\u017cywania TestContainers r\u00f3wnie\u017c do developmentu. Wygl\u0105da to troch\u0119 jak praca z Docker Compose, z wyj\u0105tkiem tego, \u017ce konfiguracja kontenera jest w Javie, a nie w YAML. Ca\u0142o\u015b\u0107 ma oprze\u0107 si\u0119 na koncepcie obiekt\u00f3w <code>ConnectionDetails<\/code> - beanach zapewniaj\u0105cych po\u0142\u0105czenie do zewn\u0119trznych serwis\u00f3w. Je\u015bli zostan\u0105 zdefiniowane w projekcie, b\u0119d\u0105 mia\u0142y pierwsze\u0144stwo przed po\u0142\u0105czeniami \"na zewn\u0105trz\", dzi\u0119ki czemu mo\u017cliwe b\u0119dzie np. przekierowanie po\u0142\u0105cze\u0144 do lokalnej wersji Postgresa, postawionej w tle za pomoc\u0105 TestContainers.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po drugie, wprowadzono now\u0105 bibliotek\u0119 <code>spring-boot-docker-compose<\/code>, kt\u00f3ra zajmuje si\u0119 obs\u0142ug\u0105 plik\u00f3w Docker Compose w projekcie. Kiedy aplikacja si\u0119 uruchamia, szuka pliku Docker Compose i jego konfiguracji, a nast\u0119pnie tworzy dla nas kontener w oparciu o TestContainers (dla tych kt\u00f3rzy jednak preferuj\u0105 u\u017cywanie YAML-a a nie Javy). Dodatkowo, do\u0142\u0105cza te konfiguracje do naszej lokalnej aplikacji. Oznacza to, \u017ce mo\u017cemy uruchomi\u0107 plik <code>docker-compose.yaml<\/code> w naszym projekcie bez konieczno\u015bci konfigurowania go w <code>application.yaml<\/code>.<\/p>\n","innerContent":["\n<p>Po drugie, wprowadzono now\u0105 bibliotek\u0119 <code>spring-boot-docker-compose<\/code>, kt\u00f3ra zajmuje si\u0119 obs\u0142ug\u0105 plik\u00f3w Docker Compose w projekcie. Kiedy aplikacja si\u0119 uruchamia, szuka pliku Docker Compose i jego konfiguracji, a nast\u0119pnie tworzy dla nas kontener w oparciu o TestContainers (dla tych kt\u00f3rzy jednak preferuj\u0105 u\u017cywanie YAML-a a nie Javy). Dodatkowo, do\u0142\u0105cza te konfiguracje do naszej lokalnej aplikacji. Oznacza to, \u017ce mo\u017cemy uruchomi\u0107 plik <code>docker-compose.yaml<\/code> w naszym projekcie bez konieczno\u015bci konfigurowania go w <code>application.yaml<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo pojawi\u0142a si\u0119 masa aktualizacji zale\u017cno\u015bci, takich jak Hibernate 6.2, Mockito 5 czy Jackson 2.15.<\/p>\n","innerContent":["\n<p>Dodatkowo pojawi\u0142a si\u0119 masa aktualizacji zale\u017cno\u015bci, takich jak Hibernate 6.2, Mockito 5 czy Jackson 2.15.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opr\u00f3cz tego, drobne aktualizacje otrzyma\u0142y r\u00f3wnie\u017c projekty takie jak:<\/p>\n","innerContent":["\n<p>Opr\u00f3cz tego, drobne aktualizacje otrzyma\u0142y r\u00f3wnie\u017c projekty takie jak:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/12\/spring-data-2023-0-goes-ga\">Spring Data (2023.0.0)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/12\/spring-data-2023-0-goes-ga\">Spring Data (2023.0.0)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/17\/spring-for-graphql-1-2-0-released\">Spring for GraphQL (wersja 1.2.0)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/17\/spring-for-graphql-1-2-0-released\">Spring for GraphQL (wersja 1.2.0)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">Spring Security (wersja 6.1)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">Spring Security (wersja 6.1)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/17\/spring-authorization-server-1-1-0-available-now\">Spring Authorization Server (wersja 1.1)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/05\/17\/spring-authorization-server-1-1-0-available-now\">Spring Authorization Server (wersja 1.1)<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zmiany zachodz\u0105ce w nich s\u0105 jednak nieco mniejsze, dlatego zach\u0119cam do zerkni\u0119cia do oryginalnych Release Notes.<\/p>\n","innerContent":["\n<p>Zmiany zachodz\u0105ce w nich s\u0105 jednak nieco mniejsze, dlatego zach\u0119cam do zerkni\u0119cia do oryginalnych Release Notes.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16052,"width":768,"height":450,"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\/2023\/06\/FeelsOldYet.png\" alt=\"\" class=\"wp-image-16052\" width=\"768\" height=\"450\"\/><figcaption class=\"wp-element-caption\">BTW: Wiecie, \u017ce Spring Boot ma ju\u017c prawie dziesi\u0119\u0107 lat? Poczu\u0142em si\u0119 staro.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/06\/FeelsOldYet.png\" alt=\"\" class=\"wp-image-16052\" width=\"768\" height=\"450\"\/><figcaption class=\"wp-element-caption\">BTW: Wiecie, \u017ce Spring Boot ma ju\u017c prawie dziesi\u0119\u0107 lat? Poczu\u0142em si\u0119 staro.<\/figcaption><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16050","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=16050"}],"version-history":[{"count":21,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16050\/revisions"}],"predecessor-version":[{"id":16100,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16050\/revisions\/16100"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/16079"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=16050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=16050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=16050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}