{"id":6926,"date":"2019-06-03T03:43:50","date_gmt":"2019-06-03T10:43:50","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6926"},"modified":"2023-05-25T05:17:23","modified_gmt":"2023-05-25T12:17:23","slug":"sticky-sessions","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/sticky-sessions\/","title":{"rendered":"Elimina\u00e7\u00e3o de sess\u00f5es fixas em Java | Couchbase Spring Session"},"content":{"rendered":"<p><strong>Sess\u00f5es fixas<\/strong> refere-se \u00e0 necessidade de redirecionar as solicita\u00e7\u00f5es de um determinado usu\u00e1rio para o mesmo servidor em que sua sess\u00e3o reside. Isso \u00e9 considerado um antipadr\u00e3o, pois, em caso de falha do servidor, todos os usu\u00e1rios conectados a ele perder\u00e3o suas sess\u00f5es.<\/p>\n<p>A associa\u00e7\u00e3o entre o usu\u00e1rio e o servidor geralmente \u00e9 configurada por meio do balanceador de carga, e estrat\u00e9gias simples de balanceamento de carga, como <b>Redondo<\/b>-<b>robin<\/b> muitas vezes n\u00e3o s\u00e3o suficientes para garantir uma distribui\u00e7\u00e3o uniforme das solicita\u00e7\u00f5es, pois os usu\u00e1rios pesados podem acabar todos no mesmo n\u00f3. H\u00e1 muitas maneiras de evitar as sess\u00f5es fixas, mas se o seu aplicativo armazena os dados do usu\u00e1rio na sess\u00e3o HTTPS, as op\u00e7\u00f5es sem a necessidade de uma refatora\u00e7\u00e3o substancial s\u00e3o um pouco limitadas.<\/p>\n<p>Uma solu\u00e7\u00e3o r\u00e1pida para esse problema \u00e9 armazenar a sess\u00e3o no banco de dados em vez de usar a mem\u00f3ria do servidor. Nesse cen\u00e1rio, n\u00e3o importa qual n\u00f3 receba a solicita\u00e7\u00e3o, ele carregar\u00e1 a sess\u00e3o do usu\u00e1rio diretamente do armazenamento de dados. Essa abordagem \u00e9 mais simples do que as solu\u00e7\u00f5es espec\u00edficas para cont\u00eaineres e tamb\u00e9m permite que voc\u00ea consulte as sess\u00f5es como qualquer outra coisa no seu banco de dados.<\/p>\n<p>O Couchbase se encaixa particularmente bem nesse cen\u00e1rio: ele usa o mecanismo interno de valor-chave e tamb\u00e9m aproveita a camada de cache interna para manter na mem\u00f3ria as sess\u00f5es usadas recentemente. Na pr\u00e1tica, isso significa que essa \u00e9 uma solu\u00e7\u00e3o que ter\u00e1 um bom desempenho mesmo em escala. \u00c9 por isso que estamos adicionando o suporte da comunidade <a href=\"https:\/\/spring.io\/projects\/spring-session\">Sess\u00e3o de primavera<\/a>:<\/p>\n<p><a href=\"https:\/\/github.com\/couchbaselabs\/spring-session-data-couchbase\">Sess\u00e3o do Couchbase Spring<\/a> torna trivial o suporte a sess\u00f5es em cluster, armazenando-o no banco de dados e, do ponto de vista do desenvolvedor, \u00e9 totalmente transparente. Tudo o que voc\u00ea precisa fazer \u00e9 adicionar a seguinte depend\u00eancia:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;dependency&gt;\r\n\t&lt;groupId&gt;io.github.couchbaselabs&lt;\/groupId&gt;\r\n\t&lt;artifactId&gt;spring-session-data-couchbase&lt;\/artifactId&gt;\r\n\t&lt;version&gt;1.1&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p>e, em seguida, em sua classe principal, adicione a tag <strong>@EnableCouchbaseHttpSession<\/strong> anota\u00e7\u00e3o:<\/p>\n<pre class=\"lang:java decode:true\">@SpringBootApplication\r\n@EnableCouchbaseHttpSession\r\npublic class SessionStoreApplication {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tSpringApplication.run(SessionStoreApplication.class, args);\r\n\t}\r\n\r\n}<\/pre>\n<p>e pronto! De agora em diante, o Spring salvar\u00e1 automaticamente a HTTPSession no Couchbase:<\/p>\n<pre class=\"lang:default decode:true\">    @GetMapping(\"\/newSession\")\r\n    public String newSession(HttpServletRequest request, Model model) throws Exception {\r\n\r\n        request.getSession().invalidate();\r\n        HttpSession newSession = request.getSession();\r\n        newSession.setAttribute(\"foo\", new Foo(\"key\", \"value\"));\r\n        return defaultPage(model, newSession);\r\n    }<\/pre>\n<p>Por padr\u00e3o, a sess\u00e3o ser\u00e1 armazenada no banco de dados em um documento com um tipo igual a \"<strong>sess\u00f5es<\/strong>&#8220;:<\/p>\n<pre class=\"lang:js decode:true\">\/\/key : 5b357ade-6059-4d16-aea3-6f784765e7b5\r\n\r\n\r\n{\r\n  \"_principal\": null,\r\n  \"_interval\": 1800,\r\n  \"_expireAt\": 1554743279889,\r\n  \"_created\": 1554741479889,\r\n  \"_accessed\": 1554741479889,\r\n  \"_type\": \"sessions\",\r\n  \"_attr\": \"\\\"rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAADZm9vc3IAHWNvbS5jYi5zZXNzaW9uc3RvcmUubW9kZWwuRm9vO5F+XaK9pV0CAAJMAAphdHRyaWJ1dGUxdAASTGphdmEvbGFuZy9TdHJpbmc7TAAKYXR0cmlidXRlMnEAfgAEeHB0AAZ2YWx1ZTF0AAZ2YWx1ZTJ4\\\"\"\r\n}<\/pre>\n<p>Mas voc\u00ea pode alterar o nome do atributo de tipo, o valor do tipo e a dura\u00e7\u00e3o da sess\u00e3o:<\/p>\n<pre class=\"lang:java decode:true\">@SpringBootApplication\r\n@EnableCouchbaseHttpSession(typeName = \"myType\",  typeValue = \"myValueType\", maxInactiveIntervalInSeconds = 1800)\r\npublic class SessionStoreApplication {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tSpringApplication.run(SessionStoreApplication.class, args);\r\n\t}\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h2>Consultar a sess\u00e3o do usu\u00e1rio<\/h2>\n<div class=\"paragraph\">\n<p>Observe que todos os dados da sess\u00e3o s\u00e3o armazenados de forma bin\u00e1ria em um atributo chamado\u00a0<strong>_attr:<\/strong><\/p>\n<\/div>\n<pre class=\"lang:default decode:true\">{\r\n...\r\n  \"_attr\": \"\\\"rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAADZm9vc3IAHWNvbS5jYi5zZXNzaW9uc3RvcmUubW9kZWwuRm9vO5F+XaK9pV0CAAJMAAphdHRyaWJ1dGUxdAASTGphdmEvbGFuZy9TdHJpbmc7TAAKYXR0cmlidXRlMnEAfgAEeHB0AAZ2YWx1ZTF0AAZ2YWx1ZTJ4\\\"\"\r\n}<\/pre>\n<p>O Spring n\u00e3o sabe quais tipos de objetos est\u00e3o na sess\u00e3o, portanto, n\u00e3o h\u00e1 uma maneira f\u00e1cil de convert\u00ea-lo em um formato leg\u00edvel por humanos. Voc\u00ea pode superar essa limita\u00e7\u00e3o definindo o atributo\u00a0<strong>manterStringAsLiteral<\/strong>\u00a0como verdadeiro no\u00a0<strong>EnableCouchbaseHttpSession<\/strong> anota\u00e7\u00e3o:<\/p>\n<pre class=\"lang:java decode:true\">@SpringBootApplication\r\n@EnableCouchbaseHttpSession(keepStringAsLiteral = true)\r\npublic class SessionStoreApplication {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tSpringApplication.run(SessionStoreApplication.class, args);\r\n\t}\r\n\r\n}<\/pre>\n<div class=\"paragraph\">\n<p><strong>manterStringAsLiteral<\/strong>\u00a0dir\u00e1 <a href=\"https:\/\/github.com\/couchbaselabs\/spring-session-data-couchbase\">Sess\u00e3o do Couchbase Spring<\/a> para armazenar todos os atributos String da sess\u00e3o como propriedades de n\u00edvel superior no documento. Por exemplo, em vez de adicionar uma inst\u00e2ncia diretamente \u00e0 sess\u00e3o, poder\u00edamos converter o objeto em um formato String codificado em JSON usando a fun\u00e7\u00e3o\u00a0<code>Mapeador de objetos<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-Java hljs\" data-lang=\"Java\">ObjectMapper mapper = new ObjectMapper();\r\nsession.setAttribute(\"key\", mapper.writeValueAsString(myClassInstance))<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>E ent\u00e3o, quando voc\u00ea precisar ler o carrinho de sess\u00e3o, converta-o novamente em um objeto:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-Java hljs\" data-lang=\"Java\">ObjectMapper mapper = new ObjectMapper();\r\nmapper.readValue( session.getAttribute(\"key\").toString(), MyClass.class);<\/code><\/pre>\n<\/div>\n<\/div>\n<div>Isso exigir\u00e1 um pouco mais de esfor\u00e7o quando voc\u00ea precisar adicionar\/remover\/atualizar dados da sess\u00e3o, mas, por outro lado, voc\u00ea poder\u00e1 consultar as sess\u00f5es. Esta \u00e9 a apar\u00eancia do documento no banco de dados:<\/div>\n<div><\/div>\n<div>\n<pre class=\"lang:js decode:true\">\/\/key : 5b2a2487-4825-43de-b089-1b61703556b2\r\n\r\n{\r\n  \"_principal\": null,\r\n  \"_interval\": 1800,\r\n  \"_expireAt\": 1554746972015,\r\n  \"_created\": 1554745163803,\r\n  \"_accessed\": 1554745172015,\r\n  \"key\": \"{\\\"shoppingCart\\\":{\\\"created\\\":1554745170784,\\\"items\\\":[{\\\"itemName\\\":\\\"Tennis Shoes\\\",\\\"price\\\":38.25186017511709,\\\"quantity\\\":3}]},\\\"user\\\":{\\\"username\\\":\\\"robertst\\\",\\\"phoneNumber\\\":\\\"(500)-383-1668\\\"},\\\"location\\\":{\\\"address\\\":\\\"90 Arrowhead Avenue Jonesboro, GA 30236\\\",\\\"country\\\":\\\"USA\\\",\\\"coordinates\\\":{\\\"lat\\\":10,\\\"lon\\\":37}}}\",\r\n  \"_type\": \"sessions\",\r\n  \"_attr\": \"\\\"rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAB3CAAAABAAAAAAeA==\\\"\"\r\n}<\/pre>\n<p>Observe que ainda temos o <strong>_att<\/strong> para objetos que n\u00e3o sejam uma String. No entanto, agora tamb\u00e9m temos um atributo chamado <strong>chave,<\/strong> que \u00e9 exatamente o objeto que adicionamos \u00e0 sess\u00e3o no exemplo anterior.<\/p>\n<\/div>\n<p>Agora, se voc\u00ea quiser consultar sua sess\u00e3o, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/n1ql\/\">N1QL<\/a>\u00a0tem uma fun\u00e7\u00e3o chamada\u00a0<a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/n1ql\/n1ql-language-reference\/jsonfun.html\">DECODE_JSON<\/a>que pode transformar uma string codificada em JSON em um objeto:<\/p>\n<pre class=\"lang:pgsql decode:true\">SELECT\r\n    meta().id as id, _created, ARRAY_COUNT(DECODE_JSON(sessionCart).shoppingCart.items)\r\nFROM sessionstore\r\nORDER BY _created DESC\r\nLIMIT 10<\/pre>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> Em um ambiente de produ\u00e7\u00e3o, recomendamos que voc\u00ea crie um \u00edndice com o objeto decodificado em vez de decodific\u00e1-lo no momento da consulta.<\/p>\n<p>Se voc\u00ea quiser saber mais sobre o Couchbase Spring Session, confira este <a href=\"https:\/\/docs.couchbase.com\/tutorials\/session-storage\/java.html\">tutorial<\/a><\/p>\n<p>Se tiver alguma d\u00favida, sinta-se \u00e0 vontade para entrar em contato comigo pelo e-mail <a href=\"https:\/\/twitter.com\/deniswsrosa\">@deniswrosa<\/a><\/p>\n<div><\/div>\n<div><\/div>","protected":false},"excerpt":{"rendered":"<p>Sticky Sessions refers to the need to redirect the requests of a given user to the same server where his session lives in. It is considered an anti-pattern as in case of a server failure, all users connected to it [&hellip;]<\/p>","protected":false},"author":8754,"featured_media":7000,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1818],"tags":[1424],"ppma_author":[9059],"class_list":["post-6926","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-spring"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting Rid of Sticky Sessions in Java | Couchbase Spring Session<\/title>\n<meta name=\"description\" content=\"Learn what is Sticky Sessions and how to get rid of it in Java. See how Couchbase is a solution for this. Also, check Couchbase Spring Session.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/sticky-sessions\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Rid of Sticky Sessions in Java | Couchbase Spring Session\" \/>\n<meta property=\"og:description\" content=\"Learn what is Sticky Sessions and how to get rid of it in Java. See how Couchbase is a solution for this. Also, check Couchbase Spring Session.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/sticky-sessions\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-03T10:43:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-25T12:17:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/Couchbase-Spring-Session.png\" \/>\n\t<meta property=\"og:image:width\" content=\"728\" \/>\n\t<meta property=\"og:image:height\" content=\"210\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Denis Rosa, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@deniswsrosa\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Denis Rosa, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/\"},\"author\":{\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257\"},\"headline\":\"Getting Rid of Sticky Sessions in Java | Couchbase Spring Session\",\"datePublished\":\"2019-06-03T10:43:50+00:00\",\"dateModified\":\"2023-05-25T12:17:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/\"},\"wordCount\":624,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/Couchbase-Spring-Session.png\",\"keywords\":[\"spring\"],\"articleSection\":[\"Java\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/\",\"name\":\"Getting Rid of Sticky Sessions in Java | Couchbase Spring Session\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/Couchbase-Spring-Session.png\",\"datePublished\":\"2019-06-03T10:43:50+00:00\",\"dateModified\":\"2023-05-25T12:17:23+00:00\",\"description\":\"Learn what is Sticky Sessions and how to get rid of it in Java. See how Couchbase is a solution for this. Also, check Couchbase Spring Session.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/Couchbase-Spring-Session.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/Couchbase-Spring-Session.png\",\"width\":728,\"height\":210},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Rid of Sticky Sessions in Java | Couchbase Spring Session\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257\",\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/be0716f6199cfb09417c92cf7a8fa8d6\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g\",\"caption\":\"Denis Rosa, Developer Advocate, Couchbase\"},\"description\":\"Denis Rosa is a Developer Advocate for Couchbase and lives in Munich - Germany. He has a solid experience as a software engineer and speaks fluently Java, Python, Scala and Javascript. Denis likes to write about search, Big Data, AI, Microservices and everything else that would help developers to make a beautiful, faster, stable and scalable app.\",\"sameAs\":[\"https:\/\/x.com\/deniswsrosa\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/denis-rosa\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Elimina\u00e7\u00e3o de sess\u00f5es fixas em Java | Couchbase Spring Session","description":"Saiba o que s\u00e3o Sticky Sessions e como se livrar delas em Java. Veja como o Couchbase \u00e9 uma solu\u00e7\u00e3o para isso. Al\u00e9m disso, verifique o Couchbase Spring Session.","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:\/\/www.couchbase.com\/blog\/pt\/sticky-sessions\/","og_locale":"pt_BR","og_type":"article","og_title":"Getting Rid of Sticky Sessions in Java | Couchbase Spring Session","og_description":"Learn what is Sticky Sessions and how to get rid of it in Java. See how Couchbase is a solution for this. Also, check Couchbase Spring Session.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/sticky-sessions\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-06-03T10:43:50+00:00","article_modified_time":"2023-05-25T12:17:23+00:00","og_image":[{"width":728,"height":210,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/Couchbase-Spring-Session.png","type":"image\/png"}],"author":"Denis Rosa, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@deniswsrosa","twitter_misc":{"Written by":"Denis Rosa, Developer Advocate, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/"},"author":{"name":"Denis Rosa, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257"},"headline":"Getting Rid of Sticky Sessions in Java | Couchbase Spring Session","datePublished":"2019-06-03T10:43:50+00:00","dateModified":"2023-05-25T12:17:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/"},"wordCount":624,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/Couchbase-Spring-Session.png","keywords":["spring"],"articleSection":["Java"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/","url":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/","name":"Elimina\u00e7\u00e3o de sess\u00f5es fixas em Java | Couchbase Spring Session","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/Couchbase-Spring-Session.png","datePublished":"2019-06-03T10:43:50+00:00","dateModified":"2023-05-25T12:17:23+00:00","description":"Saiba o que s\u00e3o Sticky Sessions e como se livrar delas em Java. Veja como o Couchbase \u00e9 uma solu\u00e7\u00e3o para isso. Al\u00e9m disso, verifique o Couchbase Spring Session.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/sticky-sessions\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/Couchbase-Spring-Session.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/Couchbase-Spring-Session.png","width":728,"height":210},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/sticky-sessions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting Rid of Sticky Sessions in Java | Couchbase Spring Session"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257","name":"Denis Rosa, defensor dos desenvolvedores, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/be0716f6199cfb09417c92cf7a8fa8d6","url":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","caption":"Denis Rosa, Developer Advocate, Couchbase"},"description":"Denis Rosa \u00e9 um Developer Advocate do Couchbase e mora em Munique, na Alemanha. Ele tem uma s\u00f3lida experi\u00eancia como engenheiro de software e fala fluentemente Java, Python, Scala e Javascript. Denis gosta de escrever sobre pesquisa, Big Data, IA, microsservi\u00e7os e tudo o mais que possa ajudar os desenvolvedores a criar um aplicativo bonito, mais r\u00e1pido, est\u00e1vel e escal\u00e1vel.","sameAs":["https:\/\/x.com\/deniswsrosa"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/denis-rosa\/"}]}},"authors":[{"term_id":9059,"user_id":8754,"is_guest":0,"slug":"denis-rosa","display_name":"Denis Rosa, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","author_category":"","last_name":"Rosa, Developer Advocate, Couchbase","first_name":"Denis","job_title":"","user_url":"","description":"Denis Rosa \u00e9 um Developer Advocate do Couchbase e mora em Munique, na Alemanha. Ele tem uma s\u00f3lida experi\u00eancia como engenheiro de software e fala fluentemente Java, Python, Scala e Javascript. Denis gosta de escrever sobre pesquisa, Big Data, IA, microsservi\u00e7os e tudo o mais que possa ajudar os desenvolvedores a criar um aplicativo bonito, mais r\u00e1pido, est\u00e1vel e escal\u00e1vel."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6926","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/8754"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=6926"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6926\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/7000"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=6926"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=6926"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=6926"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=6926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}