{"id":8945,"date":"2020-07-26T14:35:38","date_gmt":"2020-07-26T21:35:38","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8945"},"modified":"2025-06-13T22:44:56","modified_gmt":"2025-06-14T05:44:56","slug":"refactoring-spring-microservices-application-to-work-with-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/refactoring-spring-microservices-application-to-work-with-couchbase\/","title":{"rendered":"Refatora\u00e7\u00e3o de aplicativos de microsservi\u00e7os do Spring para funcionar com o Couchbase"},"content":{"rendered":"<p>Sou um grande f\u00e3 de plataformas de aprendizagem on-line, como <a href=\"https:\/\/udemy.com\/\">Udemy<\/a>. Pelo pre\u00e7o de uma garrafa de vinho, voc\u00ea poderia aprender praticamente qualquer coisa, desde psicologia e culin\u00e1ria tailandesa at\u00e9 linguagens de programa\u00e7\u00e3o, sistemas operacionais e certifica\u00e7\u00f5es de TI.  Recentemente, decidi fazer um curso com um t\u00edtulo longo: <strong><a href=\"https:\/\/www.udemy.com\/course\/kubernetes-microservices\/\">\"Kubernetes pr\u00e1tico - Implante microsservi\u00e7os na nuvem da AWS\"<\/a><\/strong>. \u00c9 um \u00f3timo curso e, se voc\u00ea quiser saber mais sobre os detalhes do Kubernetes, microsservi\u00e7os, implanta\u00e7\u00f5es de nuvem e muito mais, eu o recomendo muito.<\/p>\n<p>Como um projeto pr\u00e1tico de classe para a implanta\u00e7\u00e3o de microsservi\u00e7os no Kubernetes, o autor do curso forneceu um pequeno aplicativo chamado Fleetman. O aplicativo permite monitorar uma frota de caminh\u00f5es (ou lorries, nos termos brit\u00e2nicos) que se deslocam pela grande cidade de Sheffield, no Reino Unido (embora um caminh\u00e3o esteja no centro de Londres). O aplicativo gera dados de posicionamento geogr\u00e1fico para cada caminh\u00e3o, armazena-os na mem\u00f3ria ou no banco de dados e alimenta os dados de localiza\u00e7\u00e3o em uma conveniente interface de usu\u00e1rio da Web baseada em mapas. Na interface do usu\u00e1rio, podemos ver a posi\u00e7\u00e3o mais recente de cada caminh\u00e3o, sua velocidade e a viagem atual.  Uma captura de tela do front-end da Web do aplicativo est\u00e1 listada abaixo.<\/p>\n<div id=\"attachment_8946\" style=\"width: 946px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8946\" class=\"wp-image-8946 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/Map1.png\" alt=\"\" width=\"936\" height=\"560\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map1.png 936w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map1-300x179.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map1-768x459.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map1-20x12.png 20w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><p id=\"caption-attachment-8946\" class=\"wp-caption-text\">Relat\u00f3rios de posi\u00e7\u00e3o de v\u00e1rios caminh\u00f5es<\/p><\/div>\n<p>Embora a parte interna do c\u00f3digo do aplicativo n\u00e3o fosse o foco principal do curso da Udemy (era um curso de Kubernetes e n\u00e3o de desenvolvimento de software), achei a arquitetura do aplicativo bastante fascinante, gra\u00e7as ao fato de que o <a href=\"https:\/\/github.com\/DickChesterwood\/k8s-fleetman\">c\u00f3digo-fonte<\/a> \u00e9 aberto ao p\u00fablico em geral.  Como camada de banco de dados de persist\u00eancia, o aplicativo Fleetman original usa o MongoDB, que \u00e9, sem d\u00favida, uma op\u00e7\u00e3o popular para armazenar e consultar dados simples de telemetria provenientes de caminh\u00f5es no formato JSON.<\/p>\n<p>Mas o que dizer do Couchbase? A plataforma de banco de dados Couchbase oferece muitos recursos e capacidades, como a linguagem N1QL, Analytics, Eventing e Full-Text search. Esses recursos podem tornar mais avan\u00e7ado um simples aplicativo de coleta de telemetria. Mas qual seria a dificuldade de refazer o cabeamento do aplicativo Fleetman para usar o Couchbase em vez do Mongo?  Ent\u00e3o, passei um bom tempo mergulhando no c\u00f3digo-fonte e atualizando minhas habilidades de programa\u00e7\u00e3o em Java. Vamos come\u00e7ar examinando a arquitetura do Fleetman em mais detalhes.<\/p>\n<h3><strong>Arquitetura Fleetman<\/strong><\/h3>\n<p>O aplicativo Fleetman foi projetado como um conjunto de m\u00f3dulos (ou microsservi\u00e7os) que se comunicam entre si usando v\u00e1rios m\u00e9todos e protocolos. Tr\u00eas microsservi\u00e7os: Simulador de posi\u00e7\u00e3o, Rastreador de posi\u00e7\u00e3o e API de gateway s\u00e3o escritos usando a estrutura de aplicativos Spring Boot Java. O m\u00f3dulo front-end \u00e9 escrito em Angular, que \u00e9 uma estrutura popular de desenvolvimento em Javascript. H\u00e1 tamb\u00e9m um sistema de mensagens e uma camada de banco de dados. Como voc\u00ea deve ter adivinhado, cada um desses microsservi\u00e7os seria executado em um pod separado no caso da implanta\u00e7\u00e3o do Kubernetes.<\/p>\n<div id=\"attachment_8953\" style=\"width: 874px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8953\" class=\"wp-image-8953\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/Fleetman-Architecture-1.png\" alt=\"Depiction of Fleetman Microservices Architecture\" width=\"864\" height=\"567\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Fleetman-Architecture-1.png 2288w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Fleetman-Architecture-1-300x197.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Fleetman-Architecture-1-1024x671.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Fleetman-Architecture-1-768x503.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Fleetman-Architecture-1-1536x1007.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Fleetman-Architecture-1-2048x1343.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Fleetman-Architecture-1-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Fleetman-Architecture-1-1320x865.png 1320w\" sizes=\"auto, (max-width: 864px) 100vw, 864px\" \/><p id=\"caption-attachment-8953\" class=\"wp-caption-text\">Arquitetura Fleetman<\/p><\/div>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>Simulador de posi\u00e7\u00e3o<\/strong> - gera telemetria de ve\u00edculo para cada um dos 40 caminh\u00f5es da frota lendo arquivos de configura\u00e7\u00e3o com coordenadas de posi\u00e7\u00e3o. Esses relat\u00f3rios de posi\u00e7\u00e3o s\u00e3o gravados na fila de mensagens no formato JSON, conforme mostrado abaixo.<\/li>\n<\/ul>\n<pre class=\"lang:default decode:true\">{time=2020-06-22T11:35:55.174-0400, lat=53.4002010, long=-1.4101460, vehicle=Factory Run D}<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>Rastreador de posi\u00e7\u00e3o<\/strong> - consome as posi\u00e7\u00f5es dos ve\u00edculos da fila e as armazena no Couchbase. Ele tamb\u00e9m calcula a velocidade de cada caminh\u00e3o, com base nos relat\u00f3rios de posi\u00e7\u00e3o novos e anteriores. Esse microsservi\u00e7o fornece um conjunto de m\u00e9todos para obter a posi\u00e7\u00e3o mais recente de um caminh\u00e3o espec\u00edfico, de todos os caminh\u00f5es, bem como para obter um hist\u00f3rico de todas as posi\u00e7\u00f5es de um caminh\u00e3o. Esses m\u00e9todos est\u00e3o dispon\u00edveis por meio da interface REST. Obter o hist\u00f3rico pode ser \u00fatil se um dos pods do K8s for reiniciado.<\/li>\n<li><strong>Gateway de API<\/strong> - \u00e9 um gateway simples para o front-end Angular. Ele l\u00ea as posi\u00e7\u00f5es mais recentes do ve\u00edculo no Position Tracker e as alimenta no aplicativo da Web.<\/li>\n<li><strong>Aplicativo da Web <\/strong>- \u00e9 um aplicativo baseado em Angular que permite monitorar as posi\u00e7\u00f5es dos caminh\u00f5es no mapa e pular para um local espec\u00edfico do caminh\u00e3o enquanto mostra o caminho percorrido. No mapa abaixo, \u00e9 poss\u00edvel ver a jornada do caminh\u00e3o \"London Riverside\".<\/li>\n<\/ul>\n<div id=\"attachment_8951\" style=\"width: 946px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8951\" class=\"wp-image-8951 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/Map3-2.png\" alt=\"\" width=\"936\" height=\"504\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2.png 936w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-300x162.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-768x414.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-20x11.png 20w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><p id=\"caption-attachment-8951\" class=\"wp-caption-text\">Viagem de caminh\u00e3o \"London Riverside\"<\/p><\/div>\n<h3><strong>Migra\u00e7\u00e3o para o Couchbase <\/strong><\/h3>\n<p>Gra\u00e7as \u00e0 abordagem modular da arquitetura de microsservi\u00e7os, a maior parte dos meus esfor\u00e7os de migra\u00e7\u00e3o foi gasta com o m\u00f3dulo Position Tracker, que lida com a camada de banco de dados. O c\u00f3digo original do Fleetman foi escrito h\u00e1 alguns anos, portanto, meu primeiro objetivo foi recompilar todos os microsservi\u00e7os Java com a vers\u00e3o mais recente das bibliotecas do Spring Boot. A estrutura Spring oferece aos desenvolvedores uma maneira r\u00e1pida e f\u00e1cil de configurar e desenvolver aplicativos regulares e da Web. O Spring Boot \u00e9 uma extens\u00e3o da estrutura Spring que vem com um servidor HTTP incorporado (Tomcat) e n\u00e3o requer configura\u00e7\u00e3o via XML.  \u00c9 importante observar que o Couchbase \u00e9 um cidad\u00e3o de primeira classe no que diz respeito \u00e0 integra\u00e7\u00e3o com o Spring. Em junho deste ano, a vers\u00e3o 4.x mais recente das bibliotecas Spring do Couchbase foi lan\u00e7ada e a documenta\u00e7\u00e3o completa est\u00e1 dispon\u00edvel <a href=\"https:\/\/docs.spring.io\/spring-data\/couchbase\/docs\/4.0.1.RELEASE\/reference\/html\/#metadata\">aqui<\/a>.<\/p>\n<p>Como parte da migra\u00e7\u00e3o, uma das primeiras coisas que tive de implementar foi adicionar a gera\u00e7\u00e3o de chaves ao c\u00f3digo para salvar documentos no banco de dados. Todo documento no Couchbase deve ter uma chave. O Spring Boot gera a chave usando a anota\u00e7\u00e3o @GeneratedValue com a combina\u00e7\u00e3o dos atributos do documento ou com o gerador aleat\u00f3rio de UUID. Eu usei o \u00faltimo. O mapeamento de entidades para a posi\u00e7\u00e3o do ve\u00edculo est\u00e1 listado abaixo.<\/p>\n<pre class=\"toolbar:1 lang:java decode:true\" title=\"Mapeamento da entidade VehiclePosition\">public class VehiclePosition implements Comparable\r\n{\r\n\r\n@NotNull\r\n@Id @GeneratedValue(strategy = UNIQUE)\r\nprivate String id;\r\n\r\n@NotNull\r\n@Field\r\nprivate String name;\r\n\r\n@NotNull\r\n@Field\r\nprivate BigDecimal lat;\r\n\r\n@NotNull\r\n@Field\r\nprivate BigDecimal longitude;\r\n\r\n@JsonFormat(shape=JsonFormat.Shape.STRING, pattern=\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\", timezone=\"UTC\")\r\n@NotNull\r\n@Field\r\nprivate Date timestamp;\r\n\r\nprivate BigDecimal speed;\r\n\r\n....\r\n}\r\n<\/pre>\n<p>Tamb\u00e9m foi necess\u00e1rio adicionar uma classe de configura\u00e7\u00e3o do Couchbase com um nome de host, nome de usu\u00e1rio, senha e alguns conversores para lidar com o armazenamento de valores BigDecimal para coordenadas. Por padr\u00e3o, o Couchbase armazena coordenadas como um objeto com escala e precis\u00e3o. Isso causou alguns problemas com o aplicativo.<\/p>\n<pre class=\"lang:default decode:true\">  \"lat\": {\r\n    \"scale\": 7,\r\n    \"intCompact\": 533783660,\r\n    \"precision\" (precis\u00e3o): 9\r\n  },\r\n<\/pre>\n<p>Usando conversores, consegui armazenar os dados das posi\u00e7\u00f5es dos caminh\u00f5es no seguinte formato:<\/p>\n<pre class=\"lang:default decode:true\" title=\"Relat\u00f3rio de posi\u00e7\u00e3o do ve\u00edculo armazenado no Couchbase\">{\r\n  \"name\": \"Express Delivery1\",\r\n  \"_class\": \"com.virtualpairprogrammers.tracker.domain.VehiclePosition\",\r\n  \"lat\": \"53.3009490\",\r\n  \"speed\": \"1.333069443260374304264\",\r\n  \"longitude\": \"-1.1231240\",\r\n  \"timestamp\" (registro de data e hora): 1595735263364\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>A classe de configura\u00e7\u00e3o do Couchbase est\u00e1 listada abaixo.<\/p>\n<pre class=\"toolbar:1 lang:java decode:true\" title=\"Classe de configura\u00e7\u00e3o do Couchbase\">public class CustomCouchbaseConfig extends AbstractCouchbaseConfiguration {\r\n\r\n    @Override\r\n    protected List getBootstrapHosts() {\r\n        return Collections.singletonList(\"localhost\");\r\n    }\r\n\r\n    @Override\r\n    protected String getBucketName() {\r\n        return \"test\";\r\n    }\r\n\r\n    @Override\r\n    protected String getBucketPassword() {\r\n        return \"couchbase\";\r\n    }\r\n\r\n        @Override\r\n    public CouchbaseCustomConversions customConversions() {\r\n       return new CouchbaseCustomConversions(Arrays.asList(BigDecimalToString.INSTANCE, StringToBigDecimalConverter.INSTANCE));\r\n    }\r\n\r\n    @WritingConverter\r\n    public enum BigDecimalToString implements Converter {\r\n        INSTANCE;\r\n        @Override\r\n        public String convert(BigDecimal source) {\r\n            return source.toString() ;\r\n        }\r\n\r\n       }\r\n    @ReadingConverter\r\n    public enum StringToBigDecimalConverter implements Converter {\r\n        INST\u00c2NCIA;\r\n\r\n        @Override\r\n        public BigDecimal convert(String source) {\r\n            return new BigDecimal(source);\r\n        }\r\n     }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Para configurar o Couchbase, criei um bucket de teste, adicionei um usu\u00e1rio RBAC com o mesmo nome do bucket e concedi permiss\u00f5es de acesso ao aplicativo a esse usu\u00e1rio. Tamb\u00e9m adicionei \u00edndices no nome e no registro de data e hora, pois esses dois atributos s\u00e3o usados como padr\u00f5es de acesso pelos m\u00e9todos do reposit\u00f3rio. A interface PositionRepository tem tr\u00eas m\u00e9todos para pesquisar caminh\u00f5es por nome, registro de data e hora e uma combina\u00e7\u00e3o de ambos.<\/p>\n<pre class=\"toolbar:1 lang:java decode:true\" title=\"Interface do reposit\u00f3rio de posi\u00e7\u00f5es\">interface p\u00fablica PositionRepository extends CouchbasePagingAndSortingRepository {\r\n\r\n   TreeSet findByNameAndTimestampAfterOrderByTimestampAsc(String name, Date timestamp);\r\n\r\n   List findByNameOrderByTimestampAsc(String name);\r\n\r\n   List findByTimestampAfter(Date since); List findByTimestampAfter(Date since);\r\n\r\n}\r\n<\/pre>\n<h3><\/h3>\n<h3><strong>Resumo<\/strong><\/h3>\n<p>De modo geral, a migra\u00e7\u00e3o para o Couchbase foi bastante tranquila. Testei todo o c\u00f3digo localmente, mas ele pode ser contentorizado e implantado no K8s na nuvem usando o Couchbase Autonomous Operator for Kubernetes. Esse exemplo \u00e9 apresentado <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/elastic-microservices-with-kubernetes-and-spring-boot\/\">aqui<\/a>.  Do ponto de vista empresarial, usando outros recursos do Couchbase, poder\u00edamos ampliar os recursos do aplicativo Fleetman. Por exemplo, usando N1QL ou Analytics, os desenvolvedores poderiam criar uma consulta que encontraria os 5 principais caminh\u00f5es com base na dist\u00e2ncia m\u00e1xima percorrida em um determinado per\u00edodo de tempo. O recurso Eventing poderia ser usado para enviar alertas se um determinado caminh\u00e3o exceder um limite de velocidade. Outra oportunidade de aprimoramento seria usar as consultas geoespaciais do Couchbase. O c\u00f3digo-fonte da minha vers\u00e3o do aplicativo Fleetman est\u00e1 localizado no GitHub, \u00e0 direita <a href=\"https:\/\/github.com\/pnovok\/Fleetman\">aqui<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>I\u2019m a big fan of online learning platforms, such as Udemy. For the price of a bottle of wine, you could learn pretty much anything, from psychology and Thai cooking to programming languages, operating systems and IT certifications.\u00a0 Recently, I [&hellip;]<\/p>","protected":false},"author":45744,"featured_media":10432,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,8683,1818,2389,6342,6343,2201],"tags":[2103,1424,1630],"ppma_author":[9095],"class_list":["post-8945","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-geospatial","category-java","category-solutions","category-spring","category-spring-boot","category-tools-sdks","tag-microservices","tag-spring","tag-spring-boot"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Refactoring Spring Microservices Apps to work with Couchbase<\/title>\n<meta name=\"description\" content=\"Migrating a Spring Boot microservices app to Couchbase can be done easily. Find out some tips, tricks and how-to in this blog that shows a vehicle tracking app.\" \/>\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\/refactoring-spring-microservices-application-to-work-with-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Refactoring Spring Microservices Apps to work with Couchbase\" \/>\n<meta property=\"og:description\" content=\"Migrating a Spring Boot microservices app to Couchbase can be done easily. Find out some tips, tricks and how-to in this blog that shows a vehicle tracking app.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/refactoring-spring-microservices-application-to-work-with-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-26T21:35:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:44:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"936\" \/>\n\t<meta property=\"og:image:height\" content=\"504\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/\"},\"author\":{\"name\":\"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/8ac9ba59b1f70850c9bf1f71afd655cd\"},\"headline\":\"Refactoring Spring Microservices Apps to work with Couchbase\",\"datePublished\":\"2020-07-26T21:35:38+00:00\",\"dateModified\":\"2025-06-14T05:44:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/\"},\"wordCount\":1116,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-1.png\",\"keywords\":[\"microservices\",\"spring\",\"spring-boot\"],\"articleSection\":[\"Application Design\",\"Geospatial\",\"Java\",\"Solutions\",\"Spring\",\"Spring Boot\",\"Tools &amp; SDKs\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/\",\"name\":\"Refactoring Spring Microservices Apps to work with Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-1.png\",\"datePublished\":\"2020-07-26T21:35:38+00:00\",\"dateModified\":\"2025-06-14T05:44:56+00:00\",\"description\":\"Migrating a Spring Boot microservices app to Couchbase can be done easily. Find out some tips, tricks and how-to in this blog that shows a vehicle tracking app.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-1.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-1.png\",\"width\":1200,\"height\":646},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Refactoring Spring Microservices Apps to work with Couchbase\"}]},{\"@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\/8ac9ba59b1f70850c9bf1f71afd655cd\",\"name\":\"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/6418d9373f088b2fa2f9181680ba8513\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ad85c263d3b7299b6152eca0cb0f4c4f500d85e4d2953c6722684b7f7ab19679?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ad85c263d3b7299b6152eca0cb0f4c4f500d85e4d2953c6722684b7f7ab19679?s=96&d=mm&r=g\",\"caption\":\"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase\"},\"description\":\"Pavel is a Sr. Solution Engineer at Couchbase. Previously, he worked at Teradata Corporation, Harrahs Entertainment and NCR in different roles including database management, consulting, performance engineering and technical pre-sales.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/pavel-novokshonov\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Refatora\u00e7\u00e3o de aplicativos de microsservi\u00e7os do Spring para funcionar com o Couchbase","description":"Migrating a Spring Boot microservices app to Couchbase can be done easily. Find out some tips, tricks and how-to in this blog that shows a vehicle tracking app.","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\/refactoring-spring-microservices-application-to-work-with-couchbase\/","og_locale":"pt_BR","og_type":"article","og_title":"Refactoring Spring Microservices Apps to work with Couchbase","og_description":"Migrating a Spring Boot microservices app to Couchbase can be done easily. Find out some tips, tricks and how-to in this blog that shows a vehicle tracking app.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/refactoring-spring-microservices-application-to-work-with-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-07-26T21:35:38+00:00","article_modified_time":"2025-06-14T05:44:56+00:00","og_image":[{"width":936,"height":504,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2.png","type":"image\/png"}],"author":"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/"},"author":{"name":"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/8ac9ba59b1f70850c9bf1f71afd655cd"},"headline":"Refactoring Spring Microservices Apps to work with Couchbase","datePublished":"2020-07-26T21:35:38+00:00","dateModified":"2025-06-14T05:44:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/"},"wordCount":1116,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-1.png","keywords":["microservices","spring","spring-boot"],"articleSection":["Application Design","Geospatial","Java","Solutions","Spring","Spring Boot","Tools &amp; SDKs"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/","name":"Refatora\u00e7\u00e3o de aplicativos de microsservi\u00e7os do Spring para funcionar com o Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-1.png","datePublished":"2020-07-26T21:35:38+00:00","dateModified":"2025-06-14T05:44:56+00:00","description":"Migrating a Spring Boot microservices app to Couchbase can be done easily. Find out some tips, tricks and how-to in this blog that shows a vehicle tracking app.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-1.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/Map3-2-1.png","width":1200,"height":646},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/refactoring-spring-microservices-application-to-work-with-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Refactoring Spring Microservices Apps to work with Couchbase"}]},{"@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\/8ac9ba59b1f70850c9bf1f71afd655cd","name":"Pavel Novokshonov, engenheiro s\u00eanior de solu\u00e7\u00f5es, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/6418d9373f088b2fa2f9181680ba8513","url":"https:\/\/secure.gravatar.com\/avatar\/ad85c263d3b7299b6152eca0cb0f4c4f500d85e4d2953c6722684b7f7ab19679?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ad85c263d3b7299b6152eca0cb0f4c4f500d85e4d2953c6722684b7f7ab19679?s=96&d=mm&r=g","caption":"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase"},"description":"Pavel \u00e9 engenheiro de solu\u00e7\u00f5es s\u00eanior da Couchbase. Anteriormente, ele trabalhou na Teradata Corporation, Harrahs Entertainment e NCR em diferentes fun\u00e7\u00f5es, incluindo gerenciamento de banco de dados, consultoria, engenharia de desempenho e pr\u00e9-vendas t\u00e9cnicas.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/pavel-novokshonov\/"}]}},"authors":[{"term_id":9095,"user_id":45744,"is_guest":0,"slug":"pavel-novokshonov","display_name":"Pavel Novokshonov, Sr. Solutions Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/ad85c263d3b7299b6152eca0cb0f4c4f500d85e4d2953c6722684b7f7ab19679?s=96&d=mm&r=g","first_name":"Pavel","last_name":"Novokshonov, Sr. Solutions Engineer, Couchbase","user_url":"","author_category":"","description":"Pavel \u00e9 engenheiro de solu\u00e7\u00f5es s\u00eanior da Couchbase. Anteriormente, ele trabalhou na Teradata Corporation, Harrahs Entertainment e NCR em diferentes fun\u00e7\u00f5es, incluindo gerenciamento de banco de dados, consultoria, engenharia de desempenho e pr\u00e9-vendas t\u00e9cnicas."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8945","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\/45744"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=8945"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8945\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/10432"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=8945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=8945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=8945"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=8945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}