{"id":881,"date":"2020-07-06T15:48:41","date_gmt":"2020-07-06T13:48:41","guid":{"rendered":"https:\/\/arasoftware.pl\/?p=881"},"modified":"2021-11-22T11:07:13","modified_gmt":"2021-11-22T10:07:13","slug":"spring-webflux-programowanie-reaktywne","status":"publish","type":"post","link":"https:\/\/arasoftware.pl\/en\/spring-webflux-programowanie-reaktywne\/","title":{"rendered":"Spring WebFlux &#8211; Programowanie reaktywne"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania: <\/span> <span class=\"rt-time\">3<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span><h3 class=\"wp-block-heading wp-block-heading\" id=\"co-to-jest-spring-webflux\">Co to jest Spring WebFlux?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Spring WebFlux jest to reaktywny modu&#322; Spring&#8217;a, pozwalaj&#261;cy na zastosowanie reaktywnych strumieni oraz u&#380;ycie nieblokuj&#261;cych si&#281; kontener&oacute;w aplikacji takich jak Netty lub Undertown. Oczywi&#347;cie mo&#380;emy te&#380; skonfigurowa&#263; Tomcat&#8217;a jako kontener nieblokuj&#261;cy, lecz wcze&#347;niej wymienione serwery aplikacji zosta&#322;y zaprojektowane od podstaw tak, aby mo&#380;na by&#322;o je wykorzystywa&#263; do rozwi&#261;za&#324; typu non-blocking.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Spring WebFlux jest to implementacja paradygmatu programowania reaktywnego w Spring Framework 5. Je&#347;li nie wiesz, czym jest ten paradygmat, to zanim przejdziesz dalej, zach&#281;cam Ci&#281; do przeczytania artyku&#322;u na temat <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/arasoftware.pl\/2020\/07\/01\/programowanie-reaktywne\/\" target=\"_blank\">programowania reaktywnego<\/a><\/strong>, w kt&oacute;rym dowiesz si&#281; wi&#281;cej na jego temat.<\/p>\n\n\n\n<figure class=\"wp-block-embed-wordpress aligncenter wp-block-embed is-type-wp-embed is-provider-ara-software-blog\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/arasoftware.pl\/2020\/07\/01\/programowanie-reaktywne\n<\/div><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Ok, skoro ju&#380; wiesz, czym jest paradygmat programowania reaktywnego, to przejd&#378;my do jego implementacji w&nbsp;Spring&#8217;u. Ca&#322;y modu&#322; Spring WebFlux zosta&#322; oparty o <a aria-label=\"Project Reaktor (otwiera si&#281; na nowej zak&#322;adce)\" href=\"https:\/\/projectreactor.io\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Project Reaktor<\/strong><\/a>. Jest to biblioteka stworzona do programowania reaktywnego w j&#281;zyku Java.<\/p>\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"dodanie-spring-webflux-do-projektu\">\n<br>Dodanie Spring WebFlux do projektu<\/h3>\n\n\n<h5 class=\"wp-block-heading wp-block-heading\" id=\"maven\">Maven<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"xml\" class=\"language-xml line-numbers\">&lt;!-- https:\/\/mvnrepository.com\/artifact\/org.springframework.boot\/spring-boot-starter-webflux -->\n&lt;dependency>\n    &lt;groupId>org.springframework.boot&lt;\/groupId>\n    &lt;artifactId>spring-boot-starter-webflux&lt;\/artifactId>\n    &lt;version>2.3.1.RELEASE&lt;\/version>\n&lt;\/dependency><\/code><\/pre>\n\n\n<h5 class=\"wp-block-heading wp-block-heading\" id=\"gradle\">\n<br>Gradle<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"kotlin\" class=\"language-kotlin line-numbers\">\/\/ https:\/\/mvnrepository.com\/artifact\/org.springframework.boot\/spring-boot-starter-webflux\ncompile group: 'org.springframework.boot', name: 'spring-boot-starter-webflux', version: '2.3.1.RELEASE'\n<\/code><\/pre>\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"strumiec584-flux\">\n<br>Strumie&#324; Flux <\/h3>\n\n\n<p class=\"wp-block-paragraph\">Jest to reaktywny strumie&#324; (Publisher), kt&oacute;ry mo&#380;e wyemitowa&#263; od 0 do N element&oacute;w. Implementuje on interfejs Publisher&lt;T&gt; i mo&#380;e posiada&#263; jedn&#261; z trzech warto&#347;ci:<\/p>\n\n\n<ul class=\"wp-block-list wp-block-list\" style=\"\">\n<li>element &#8211; obiekt<\/li>\n<li>sygna&#322; sukcesu <\/li>\n<li>sygna&#322; b&#322;&#281;du<\/li>\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">Poni&#380;ej znajduj&#281; si&#281; schemat dzia&#322;ania strumienia Flux:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/projectreactor.io\/docs\/core\/release\/api\/reactor\/core\/publisher\/doc-files\/marbles\/flux.svg\" alt=\"\"\/><figcaption>Schemat dzia\u0142ania strumienia Flux.<\/figcaption><\/figure>\n\n\n<h5 class=\"wp-block-heading wp-block-heading\" id=\"przykc582ad-uc5bcycia-strumienia-flux\">Przyk&#322;ad u&#380;ycia strumienia Flux<\/h5>\n\n\n<p class=\"wp-block-paragraph\">Utw&oacute;rzmy klas&#281; Person, kt&oacute;ra b&#281;dzie posiada&#263; informacje o imieniu oraz wieku osoby.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java line-numbers\">public class Person() {\n   public int age;\n   public String name;\n   \/\/ constructor\n   \/\/ getters and setetrs\n}<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">W kolejnym kroku dodajmy kontroler, kt&oacute;ry b&#281;dzie udost&#281;pnia&#322; endpoint &#8222;getRandomPersons&#8221; typu GET. B&#281;dzie on zwraca&#322; list&#281; obiekt&oacute;w typu Person z losowymi danymi.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java line-numbers\">@RestController\npublic class WebFluxConstructor {\n\n    @GetMapping(\"\/persons\")\n    private Flux&lt;Person> getAllPersons() {\n        return Flux.just(new Person(new Random().nextInt(), UUID.randomUUID().toString()),\n                new Person(new Random().nextInt(), UUID.randomUUID().toString()),\n                new Person(new Random().nextInt(), UUID.randomUUID().toString()));\n    }\n}<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Po uruchomieniu aplikacji&nbsp;widzimy, &#380;e&nbsp;nie zosta&#322;a ona uruchomiona na serwerze&nbsp;Tomcat, jak to si&#281;&nbsp;dzieje&nbsp;standardowo dla&nbsp;Spring&nbsp;Boot, lecz na&nbsp;Netty. Oczywi&#347;cie wszystko za spraw&#261; WebFliux&#8217;a, kt&oacute;ry to potrzebuje do dzia&#322;ania serwera&nbsp;non-blocking. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">2020-07-06 15:05:46.234  INFO 30956 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 8080<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Po wywo&#322;aniu adresu &#8221; <a href=\"http:\/\/localhost:8080\/persons\">http:\/\/localhost:8080\/persons<\/a>&#8221; w przegl&#261;darce otrzymamy wynik zbli&#380;ony do poni&#380;szego. Nie jest to typowy response w postaci JSON, lecz strumie&#324; danych.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">[{\"age\":-770853828,\"name\":\"3326acf9-1d20-4712-a760-ddefbb1de81e\"},{\"age\":22283567,\"name\":\"22791c71-2d9d-4d29-b37c-841e2b13b7cf\"},{\"age\":1324763993,\"name\":\"12639158-9ecd-4df8-a83e-45d35ce1bec4\"}]<\/code><\/pre>\n\n\n\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"strumiec584-mono\">\n<br>Strumie&#324; Mono<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Strumie&#324; Mono jest bardzo podobny do&nbsp;Flux&nbsp;z t&#261;&nbsp;r&oacute;&#380;nic&#261;, &#380;e&nbsp;przyjmuje on 0 lub jeden element. Mo&#380;na&nbsp;powiedzie&#263;, &#380;e&nbsp;jest to uproszczona wersja&nbsp;Flux. Taki podzia&#322; na dwa r&oacute;&#380;ne strumienie daje programi&#347;cie mo&#380;liwo&#347;&#263; jasnego zdefiniowania czy dana funkcjonalno&#347;&#263; ma udost&#281;pnia&#263; jeden lub wiele element&oacute;w danego typu. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Schemat dzia&#322;ania strumienia Mono zosta&#322; przedstawiony na poni&#380;szym obrazku:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"227\" src=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/mono-event-processing.jpg\" alt=\"\" class=\"wp-image-941\" srcset=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/mono-event-processing.jpg 640w, https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/mono-event-processing-300x106.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Schemat dzia\u0142ania strumienia Mono.<\/figcaption><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Implementacja endpointu, kt&oacute;ry wykorzystuj&#281; strumie&#324; Mono do udost&#281;pniania danych, jest bardzo podobna jak ta w przypadku Flux.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Tym razem dodamy dwa parametry, kt&oacute;re b&#281;d&#261; odpowiada&#263; za imi&#281; i wiek osoby, kt&oacute;rej dane chcemy pobra&#263;.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java line-numbers\">    @GetMapping(\"\/person\/{name}\/{age}\")\n    private Mono&lt;Person> getEmployeeByNameAndAge(@PathVariable String name, @PathVariable int age) {\n        return Mono.just(new Person(age, name));\n    }<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Jako response zapytania &#8221; <a href=\"http:\/\/localhost:8080\/person\/Radek\/30\">http:\/\/localhost:8080\/person\/Radek\/30<\/a> &#8221; otrzymamy obiekt Person:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">{\"age\":30,\"name\":\"Radek\"}<\/code><\/pre>\n\n\n<h3 class=\"wp-block-heading wp-block-heading\" id=\"podsumowanie\">Podsumowanie<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Oczywi&#347;cie jest to prosta&nbsp;implantacja, kt&oacute;ra nie&nbsp;wykorzystuje&nbsp;po&#322;&#261;czenia z baz&#261; danych. Jednak zawsze mo&#380;na zast&#261;pi&#263; cia&#322;o metod w kontrolerze i udost&#281;pnia&#263; dane zapisane w bazie.&nbsp;Pami&#281;taj&#380;e&nbsp;po&#322;&#261;czenie&nbsp;do bazy danych tak&#380;e powinno by&#263; nieblokuj&#261;ce. <\/p>\n\n\n<p class=\"wp-block-paragraph\">Podoba&#322; Ci si&#281; ten artyku&#322;? Udost&#281;pnij go i podziel si&#281; nim ze swoimi znajomymi!<\/p>","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania: <\/span> <span class=\"rt-time\">3<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span> Co to jest Spring WebFlux? Spring WebFlux jest to reaktywny modu&#322; Spring&#8217;a, pozwalaj&#261;cy na zastosowanie reaktywnych strumieni oraz u&#380;ycie nieblokuj&#261;cych si&#281; kontener&oacute;w aplikacji takich jak Netty lub Undertown. Oczywi&#347;cie mo&#380;emy te&#380; skonfigurowa&#263; Tomcat&#8217;a jako kontener nieblokuj&#261;cy, lecz wcze&#347;niej wymienione serwery aplikacji zosta&#322;y zaprojektowane od podstaw tak, aby mo&#380;na by&#322;o je wykorzystywa&#263; do rozwi&#261;za&#324; typu non-blocking. &hellip;<\/p>","protected":false},"author":1,"featured_media":963,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,13,19],"tags":[18,27,14,28],"class_list":["post-881","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","category-programowanie","category-spring-boot","tag-java","tag-programowanie-reaktywne","tag-spring-boot","tag-spring-webflux"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.11 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring WebFlux - Programowanie reaktywne - Ara Software<\/title>\n<meta name=\"description\" content=\"Spring WebFlux jest to reaktywny modu\u0142 Spring&#039;a, pozwalaj\u0105cy na zastosowanie reaktywnych strumieni oraz u\u017cycie nieblokuj\u0105cych si\u0119 kontener\u00f3w aplikacji.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/arasoftware.pl\/en\/spring-webflux-programowanie-reaktywne\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring WebFlux - Programowanie reaktywne - Ara Software\" \/>\n<meta property=\"og:description\" content=\"Spring WebFlux jest to reaktywny modu\u0142 Spring&#039;a, pozwalaj\u0105cy na zastosowanie reaktywnych strumieni oraz u\u017cycie nieblokuj\u0105cych si\u0119 kontener\u00f3w aplikacji.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/arasoftware.pl\/en\/spring-webflux-programowanie-reaktywne\/\" \/>\n<meta property=\"og:site_name\" content=\"Ara Software\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-06T13:48:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-22T10:07:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/spring-webflux-programowanie-reaktywne.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Radek Osak\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Radek Osak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/\"},\"author\":{\"name\":\"Radek Osak\",\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/person\/a13fe68bd27e762ef255547a88956902\"},\"headline\":\"Spring WebFlux &#8211; Programowanie reaktywne\",\"datePublished\":\"2020-07-06T13:48:41+00:00\",\"dateModified\":\"2021-11-22T10:07:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/\"},\"wordCount\":546,\"publisher\":{\"@id\":\"https:\/\/arasoftware.pl\/#organization\"},\"keywords\":[\"Java\",\"Programowanie reaktywne\",\"Spring Boot\",\"Spring WebFlux\"],\"articleSection\":[\"JAVA\",\"Programowanie\",\"Spring Boot\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/\",\"url\":\"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/\",\"name\":\"Spring WebFlux - Programowanie reaktywne - Ara Software\",\"isPartOf\":{\"@id\":\"https:\/\/arasoftware.pl\/#website\"},\"datePublished\":\"2020-07-06T13:48:41+00:00\",\"dateModified\":\"2021-11-22T10:07:13+00:00\",\"description\":\"Spring WebFlux jest to reaktywny modu\u0142 Spring'a, pozwalaj\u0105cy na zastosowanie reaktywnych strumieni oraz u\u017cycie nieblokuj\u0105cych si\u0119 kontener\u00f3w aplikacji.\",\"breadcrumb\":{\"@id\":\"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/arasoftware.pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring WebFlux &#8211; Programowanie reaktywne\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/arasoftware.pl\/#website\",\"url\":\"https:\/\/arasoftware.pl\/\",\"name\":\"Ara Software\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/arasoftware.pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/arasoftware.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/arasoftware.pl\/#organization\",\"name\":\"Ara Software\",\"url\":\"https:\/\/arasoftware.pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2023\/06\/ara-logo-light-1.svg\",\"contentUrl\":\"https:\/\/arasoftware.pl\/wp-content\/uploads\/2023\/06\/ara-logo-light-1.svg\",\"width\":317,\"height\":55,\"caption\":\"Ara Software\"},\"image\":{\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/person\/a13fe68bd27e762ef255547a88956902\",\"name\":\"Radek Osak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/arasoftware.pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2a5a97fd24033c3df7dff799dc95774b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2a5a97fd24033c3df7dff799dc95774b?s=96&d=mm&r=g\",\"caption\":\"Radek Osak\"},\"url\":\"https:\/\/arasoftware.pl\/en\/author\/radek030790gmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring WebFlux - Programowanie reaktywne - Ara Software","description":"Spring WebFlux jest to reaktywny modu\u0142 Spring'a, pozwalaj\u0105cy na zastosowanie reaktywnych strumieni oraz u\u017cycie nieblokuj\u0105cych si\u0119 kontener\u00f3w aplikacji.","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:\/\/arasoftware.pl\/en\/spring-webflux-programowanie-reaktywne\/","og_locale":"en_US","og_type":"article","og_title":"Spring WebFlux - Programowanie reaktywne - Ara Software","og_description":"Spring WebFlux jest to reaktywny modu\u0142 Spring'a, pozwalaj\u0105cy na zastosowanie reaktywnych strumieni oraz u\u017cycie nieblokuj\u0105cych si\u0119 kontener\u00f3w aplikacji.","og_url":"https:\/\/arasoftware.pl\/en\/spring-webflux-programowanie-reaktywne\/","og_site_name":"Ara Software","article_published_time":"2020-07-06T13:48:41+00:00","article_modified_time":"2021-11-22T10:07:13+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/arasoftware.pl\/wp-content\/uploads\/2020\/07\/spring-webflux-programowanie-reaktywne.png","type":"image\/png"}],"author":"Radek Osak","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Radek Osak","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/#article","isPartOf":{"@id":"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/"},"author":{"name":"Radek Osak","@id":"https:\/\/arasoftware.pl\/#\/schema\/person\/a13fe68bd27e762ef255547a88956902"},"headline":"Spring WebFlux &#8211; Programowanie reaktywne","datePublished":"2020-07-06T13:48:41+00:00","dateModified":"2021-11-22T10:07:13+00:00","mainEntityOfPage":{"@id":"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/"},"wordCount":546,"publisher":{"@id":"https:\/\/arasoftware.pl\/#organization"},"keywords":["Java","Programowanie reaktywne","Spring Boot","Spring WebFlux"],"articleSection":["JAVA","Programowanie","Spring Boot"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/","url":"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/","name":"Spring WebFlux - Programowanie reaktywne - Ara Software","isPartOf":{"@id":"https:\/\/arasoftware.pl\/#website"},"datePublished":"2020-07-06T13:48:41+00:00","dateModified":"2021-11-22T10:07:13+00:00","description":"Spring WebFlux jest to reaktywny modu\u0142 Spring'a, pozwalaj\u0105cy na zastosowanie reaktywnych strumieni oraz u\u017cycie nieblokuj\u0105cych si\u0119 kontener\u00f3w aplikacji.","breadcrumb":{"@id":"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/arasoftware.pl\/spring-webflux-programowanie-reaktywne\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/arasoftware.pl\/"},{"@type":"ListItem","position":2,"name":"Spring WebFlux &#8211; Programowanie reaktywne"}]},{"@type":"WebSite","@id":"https:\/\/arasoftware.pl\/#website","url":"https:\/\/arasoftware.pl\/","name":"Ara Software","description":"","publisher":{"@id":"https:\/\/arasoftware.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/arasoftware.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/arasoftware.pl\/#organization","name":"Ara Software","url":"https:\/\/arasoftware.pl\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/arasoftware.pl\/#\/schema\/logo\/image\/","url":"https:\/\/arasoftware.pl\/wp-content\/uploads\/2023\/06\/ara-logo-light-1.svg","contentUrl":"https:\/\/arasoftware.pl\/wp-content\/uploads\/2023\/06\/ara-logo-light-1.svg","width":317,"height":55,"caption":"Ara Software"},"image":{"@id":"https:\/\/arasoftware.pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/arasoftware.pl\/#\/schema\/person\/a13fe68bd27e762ef255547a88956902","name":"Radek Osak","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/arasoftware.pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2a5a97fd24033c3df7dff799dc95774b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2a5a97fd24033c3df7dff799dc95774b?s=96&d=mm&r=g","caption":"Radek Osak"},"url":"https:\/\/arasoftware.pl\/en\/author\/radek030790gmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/posts\/881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/comments?post=881"}],"version-history":[{"count":1,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/posts\/881\/revisions"}],"predecessor-version":[{"id":2810,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/posts\/881\/revisions\/2810"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/media\/963"}],"wp:attachment":[{"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/media?parent=881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/categories?post=881"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arasoftware.pl\/en\/wp-json\/wp\/v2\/tags?post=881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}