{"id":2226,"date":"2016-04-14T17:44:31","date_gmt":"2016-04-14T17:44:30","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2226"},"modified":"2023-08-11T11:37:47","modified_gmt":"2023-08-11T18:37:47","slug":"spring-boot-couchbase-integration","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/","title":{"rendered":"Couchbase as a First Class Citizen of Spring Boot 1.4"},"content":{"rendered":"<p><a href=\"https:\/\/spring.io\/blog\/2016\/04\/13\/spring-boot-1-4-0-m2-available-now\">Spring Boot <code>1.4.0<\/code> MILESTONE 2<\/a> is out! This is a good time to tell you about the joint effort between Spring Boot team members and the Couchbase Java SDK team to offer a first class integration of Couchbase into Spring Boot :)<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/april\/spring-boot-couchbase-integration\/springbootandcouchbase.png\" align=\"middle\" \/><\/p>\n<p>In <code>Spring Boot 1.4.0<\/code>, Couchbase becomes a first class citizen of the Spring Boot ecosystem!<\/p>\n<h2 id=\"couchbase-sdk-integration\">Couchbase SDK Integration<\/h2>\n<p>Spring Boot now directly recognizes when you have the <code>Couchbase SDK<\/code> in your classpath. And when that&#8217;s the case, it instantiates a <code>Cluster<\/code> and a <code>Bucket<\/code> bean for you using <em>autoconfiguration<\/em>.<\/p>\n<p>Spring Boot can pick up properties to further configure these core SDK classes, even the <code>CouchbaseEnvironment<\/code>!<\/p>\n<p>The following bootstrapping properties are recognized:<\/p>\n<pre class=\"editor-colors lang-text\">spring.couchbase.bootstrap-hosts\r\nspring.couchbase.bucket.name\r\nspring.couchbase.bucket.password\r\n<\/pre>\n<p>Environment tuning (IO endpoints, SSL support and default sync API timeouts) are exposed through the following properties:<\/p>\n<pre class=\"editor-colors lang-text\">spring.couchbase.env.endpoints.key-value\r\nspring.couchbase.env.endpoints.query\r\nspring.couchbase.env.endpoints.view\r\n\r\nspring.couchbase.env.ssl.enabled\r\nspring.couchbase.env.ssl.key-store\r\nspring.couchbase.env.ssl.key-store-password\r\n\r\nspring.couchbase.env.timeouts.connect\r\nspring.couchbase.env.timeouts.key-value\r\nspring.couchbase.env.timeouts.query\r\nspring.couchbase.env.timeouts.view\r\n<\/pre>\n<p>Now this is \u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f support!<\/p>\n<blockquote><p><strong>WARNING<\/strong>: Note that in the previous milestone the bootstrapping properties were prefixed with &#8221; <code>spring.*data*.couchbase<\/code> &#8220;, now becoming &#8221; <code>spring.couchbase<\/code> &#8220;.<\/p><\/blockquote>\n<h2 id=\"spring-cache-implementation\">Spring Cache Implementation<\/h2>\n<p>The <a href=\"https:\/\/www.couchbase.com\/blog\/couchbase-spring-cache\/\">Spring Cache<\/a> abstraction has a Couchbase 2.x implementation, <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-spring-cache\"><code>couchbase-spring-cache<\/code><\/a>.<\/p>\n<p>Spring Boot now recognizes this cache implementation when both the Java SDK and the <code>couchbase-spring-cache<\/code> artifacts are on the classpath.<\/p>\n<p>This integrates nicely with the previous section, seeing as the default underlying storage <code>Bucket<\/code> for the caches is the one autoconfigured by Spring Boot :)<\/p>\n<blockquote><p><strong>NOTE<\/strong>: The cache implementation has been pulled out of the Spring Data Couchbase project into its own project (in Couchbase&#8217;s github repository), so that it could be used and released separately from Spring Data.<\/p><\/blockquote>\n<blockquote><p><strong>TIP<\/strong>: Don&#8217;t forget to at least configure the <code>spring.couchbase.bootstrap-hosts<\/code> property.<\/p><\/blockquote>\n<p>This implementation of the <code>CacheManager<\/code> allows for storing data from several caches into the same Couchbase bucket, by automatically prefixing the keys in Couchbase with the name of each cache.<\/p>\n<p>The <code>CouchbaseCacheManager<\/code> will automatically reuse the <code>Bucket<\/code> autoconfigured by Spring Boot. By simply adding a property to declaratively list cache names, the corresponding caches will be pre-loaded:<\/p>\n<pre class=\"editor-colors lang-text\">spring.cache.type=couchbase\r\nspring.cache.cache-names=foo,bar\r\n<\/pre>\n<p>Five-star support, we tell you!<\/p>\n<p>You can even configure it to store data for different caches into multiple buckets. The caches can then be configured using a fluent builder pattern (eg. in a <code>CacheManagerCustomizer<\/code>). This <code>CacheBuilder<\/code> also allows you to further tune the caches, like setting a default expiration time:<\/p>\n<pre><code class=\"language-java\">@Configuration\r\npublic class CouchbaseCacheConfiguration {\r\n\r\n  private final Cluster cluster;\r\n\r\n  \/\/inject the Cluster from Boot core Couchbase support\r\n  public CouchbaseCacheConfiguration(Cluster cluster) {\r\n    this.cluster = cluster;\r\n  }\r\n\r\n  @Bean\r\n  public Bucket anotherBucket() {\r\n    return this.cluster.openBucket(\"another\", \"secret\");\r\n  }\r\n\r\n  @Bean\r\n  public CacheManagerCustomizer cmCustomizer() {\r\n    return c -&gt; {\r\n      c.prepareCache(\"biz\", CacheBuilder\r\n              .newInstance(anotherBucket())\r\n              .withExpirationInMillis(2000));\r\n    };\r\n  }\r\n}<\/code><\/pre>\n<p>This implementation can use views to selectively clear caches that are collocated in the same Bucket.<\/p>\n<p>Finally, it supports dynamic creation of caches as they are requested. To activate that, simply omit to declare any cache name and just activate Couchbase caching with the relevant property:<\/p>\n<pre class=\"editor-colors lang-text\">spring.cache.type=couchbase\r\n<\/pre>\n<p>This will use the Spring Boot autoconfigured <code>Bucket<\/code> as the default bucket for all dynamically created caches.<\/p>\n<p>Fun with <code>@Cacheable<\/code> awaits ?<\/p>\n<h2 id=\"spring-data-integration\">Spring Data Integration<\/h2>\n<p><a href=\"https:\/\/projects.spring.io\/spring-data-couchbase\/\">Spring Data Couchbase <code>2.1.0<\/code><\/a> (release train Hopper) has included several modifications that makes integration with Spring Boot a breeze.<\/p>\n<p>First the usual suspect: by default Spring Boot will autoconfigure Spring Data Couchbase to use the <code>Bucket<\/code> it created. This is made possible by having separated the core SDK configuration parts into a <code>CouchbaseConfigurer<\/code> class, while what is really specific to Spring Data is located in a new base class, <code>AbstractCouchbaseDataConfiguration<\/code>.<\/p>\n<p>If you use only Spring Data, you can go ahead and continue using the <code>AbstractCouchbaseConfiguration<\/code>, which is now both a CouchbaseConfigurer and an AbstractCouchbaseDataConfiguration.<\/p>\n<p>If you use Spring Boot however, it will autoconfigure a <code>CouchbaseConfigurer<\/code>. You can always tune your own <code>AbstractCouchbaseDataConfiguration<\/code> and inject the configurer in it.<\/p>\n<h3 id=\"other-spring-data-couchbase-features\">Other Spring Data Couchbase Features<\/h3>\n<p>The 2.1.0 release also includes a few new features:<\/p>\n<ul>\n<li>Optional automatic <code>touch<\/code> (refreshing the expiry of a document) on reads (<a href=\"https:\/\/jira.spring.io\/browse\/DATACOUCH-59\">DATACOUCH-59<\/a>)<\/li>\n<li>Improvements to sorting and pagination (<a href=\"https:\/\/jira.spring.io\/browse\/DATACOUCH-211\">DATACOUCH-211<\/a>, <a href=\"https:\/\/jira.spring.io\/browse\/DATACOUCH-214\">DATACOUCH-214<\/a>)<\/li>\n<li>Added support for auditing (eg. <code>@CreatedBy<\/code> annotation, <a href=\"https:\/\/jira.spring.io\/browse\/DATACOUCH-91\">DATACOUCH-91<\/a>)<\/li>\n<\/ul>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>Go grab that \u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f MILESTONE!<\/p>\n<p>As always, feedback is welcome (in the Spring Data <a href=\"https:\/\/jira.spring.io\/browse\/DATACOUCH\">issue tracker<\/a>, Spring Boot <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/issues?utf8=%E2%9C%93&amp;q=is%3Aissue+couchbase\">issue tracker<\/a> or on the <a href=\"https:\/\/www.couchbase.com\/forums\/c\/java-sdk\/\">Couchbase forums<\/a>).<\/p>\n<p>Happy Coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spring Boot 1.4.0 MILESTONE 2 is out! This is a good time to tell you about the joint effort between Spring Boot team members and the Couchbase Java SDK team to offer a first class integration of Couchbase into Spring [&hellip;]<\/p>\n","protected":false},"author":48,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1818],"tags":[1424,1630,1465],"ppma_author":[9022],"class_list":["post-2226","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-spring","tag-spring-boot","tag-spring-data"],"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>Couchbase as a First Class Citizen of Spring Boot 1.4 - The Couchbase Blog<\/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:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase as a First Class Citizen of Spring Boot 1.4\" \/>\n<meta property=\"og:description\" content=\"Spring Boot 1.4.0 MILESTONE 2 is out! This is a good time to tell you about the joint effort between Spring Boot team members and the Couchbase Java SDK team to offer a first class integration of Couchbase into Spring [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-14T17:44:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-11T18:37:47+00:00\" \/>\n<meta name=\"author\" content=\"Simon Basle, Software Engineer, Pivotal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simon Basle, Software Engineer, Pivotal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/\"},\"author\":{\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1\"},\"headline\":\"Couchbase as a First Class Citizen of Spring Boot 1.4\",\"datePublished\":\"2016-04-14T17:44:30+00:00\",\"dateModified\":\"2023-08-11T18:37:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/\"},\"wordCount\":593,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"spring\",\"spring-boot\",\"spring-data\"],\"articleSection\":[\"Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/\",\"name\":\"Couchbase as a First Class Citizen of Spring Boot 1.4 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-14T17:44:30+00:00\",\"dateModified\":\"2023-08-11T18:37:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase as a First Class Citizen of Spring Boot 1.4\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\/a4086d75b59570cc2e5ff66d98c5d1a1\",\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b2bcd169f85f21cee7b8a0e0c9e7854\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g\",\"caption\":\"Simon Basle, Software Engineer, Pivotal\"},\"description\":\"Simon Basl_ is a Paris-based Software Engineer working in the Spring team at Pivotal. Previously, he worked in the Couchbase Java SDK team. His interests span software design aspects (OOP, design patterns, software architecture), rich clients, what lies beyond code (continuous integration, (D)VCS, best practices), and reactive programming. He is also an editor for the French version of InfoQ.com.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/simon-basle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase as a First Class Citizen of Spring Boot 1.4 - The Couchbase Blog","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\/spring-boot-couchbase-integration\/","og_locale":"en_US","og_type":"article","og_title":"Couchbase as a First Class Citizen of Spring Boot 1.4","og_description":"Spring Boot 1.4.0 MILESTONE 2 is out! This is a good time to tell you about the joint effort between Spring Boot team members and the Couchbase Java SDK team to offer a first class integration of Couchbase into Spring [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-04-14T17:44:30+00:00","article_modified_time":"2023-08-11T18:37:47+00:00","author":"Simon Basle, Software Engineer, Pivotal","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simon Basle, Software Engineer, Pivotal","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/"},"author":{"name":"Simon Basle, Software Engineer, Pivotal","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1"},"headline":"Couchbase as a First Class Citizen of Spring Boot 1.4","datePublished":"2016-04-14T17:44:30+00:00","dateModified":"2023-08-11T18:37:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/"},"wordCount":593,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["spring","spring-boot","spring-data"],"articleSection":["Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/","url":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/","name":"Couchbase as a First Class Citizen of Spring Boot 1.4 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-14T17:44:30+00:00","dateModified":"2023-08-11T18:37:47+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/spring-boot-couchbase-integration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase as a First Class Citizen of Spring Boot 1.4"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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\/a4086d75b59570cc2e5ff66d98c5d1a1","name":"Simon Basle, Software Engineer, Pivotal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b2bcd169f85f21cee7b8a0e0c9e7854","url":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","caption":"Simon Basle, Software Engineer, Pivotal"},"description":"Simon Basl_ is a Paris-based Software Engineer working in the Spring team at Pivotal. Previously, he worked in the Couchbase Java SDK team. His interests span software design aspects (OOP, design patterns, software architecture), rich clients, what lies beyond code (continuous integration, (D)VCS, best practices), and reactive programming. He is also an editor for the French version of InfoQ.com.","url":"https:\/\/www.couchbase.com\/blog\/author\/simon-basle\/"}]}},"authors":[{"term_id":9022,"user_id":48,"is_guest":0,"slug":"simon-basle","display_name":"Simon Basle, Software Engineer, Pivotal","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","author_category":"","last_name":"Basle","first_name":"Simon","job_title":"","user_url":"","description":"Simon Basl_ is a Paris-based Software Engineer working in the Spring team at Pivotal. Previously, he worked in the Couchbase Java SDK team. His interests span software design aspects (OOP, design patterns, software architecture), rich clients, what lies beyond code (continuous integration, (D)VCS, best practices), and reactive programming. He is also an editor for the French version of InfoQ.com."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2226"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2226\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=2226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2226"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}