{"id":7692,"date":"2023-04-20T11:20:24","date_gmt":"2023-04-20T05:50:24","guid":{"rendered":"https:\/\/innovationm.co\/?p=7692"},"modified":"2023-04-20T11:20:24","modified_gmt":"2023-04-20T05:50:24","slug":"spring-boot-actuator","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/","title":{"rendered":"Spring Boot Actuator"},"content":{"rendered":"<p>The actuator is mainly used to expose operational information about the running application \u2014 health, metrics, info, dump, env, etc. It uses HTTP endpoints or JMX beans to enable us to interact with it. Once this dependency is on the classpath, several endpoints are available for us out of the box.<\/p>\n<p>The main benefit of this library is that we can get production-grade tools without having to actually implement these features ourselves.<\/p>\n<h3><strong>Predefined Endpoints In Actuator<\/strong><\/h3>\n<p>some endpoints have been added, some removed and some have been restructured in later versions<\/p>\n<ul>\n<li><em>\/auditevents <\/em>lists security audit-related events such as user login\/logout. Also, we can filter by principal or type among other fields.<\/li>\n<li><em>\/beans <\/em>returns all available beans in our <em>BeanFactory<\/em>. Unlike <em>\/auditevents<\/em>, it doesn&#8217;t support filtering.<\/li>\n<li><em>\/conditions<\/em>, formerly known as \/<em>autoconfig<\/em>, builds a report of conditions around autoconfiguration.<\/li>\n<li><em>\/configprops <\/em>allows us to fetch all <em>@ConfigurationProperties <\/em><\/li>\n<li><em>\/env <\/em>returns the current environment properties. Additionally, we can retrieve single properties.<\/li>\n<li><em>\/flyway <\/em>provides details about our Flyway database migrations.<\/li>\n<li><em>\/health <\/em>summarizes the health status of our application.<\/li>\n<li><em>\/heapdump <\/em>builds and returns a heap dump from the JVM used by our application.<\/li>\n<li><em>\/info <\/em>returns general information. It might be custom data, build information or details about the latest commit.<\/li>\n<li><em>\/liquibase <\/em>behaves like <em>\/flyway <\/em>but for Liquibase.<\/li>\n<li><em>\/logfile <\/em>returns ordinary application logs.<\/li>\n<li><em>\/loggers <\/em>enables us to query and modify the logging level of our application.<\/li>\n<li><em>\/metrics <\/em>details metrics of our application. This might include generic metrics as well as custom ones.<\/li>\n<li><em>\/prometheus <\/em>returns metrics like the previous one, but formatted to work with a Prometheus server.<\/li>\n<li><em>\/scheduledtasks <\/em>provide details about every scheduled task within our application.<\/li>\n<li><em>\/sessions <\/em>lists HTTP sessions given we are using Spring Session.<\/li>\n<li><em>\/shutdown <\/em>performs a graceful shutdown of the application.<\/li>\n<li><em>\/threaddump <\/em>dumps the thread information of the underlying JVM.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Unlike in previous versions, Actuator comes with most endpoints disabled.<\/p>\n<p>Thus, the only two available by default are <em>\/health<\/em> and <em>\/info<\/em>.<\/p>\n<p>If we want to enable all of them, we could set <em>management.endpoints.web.exposure.include=*<\/em>.<\/p>\n<p><strong>Alternatively,<\/strong> we can list endpoints that should be enabled.<\/p>\n<p><strong>Actuator now shares the security config with the regular App security rules, so the security model is dramatically simplified.<\/strong><\/p>\n<p>Therefore, to tweak Actuator security rules, we could just add an entry for <strong><em>\/actuator\/**<\/em><\/strong>. To understand this refer the code snippet below<\/p>\n<pre><strong>@Bean<\/strong>\r\n\r\n<strong>public<\/strong><strong> SecurityWebFilterChain <\/strong><strong>securityWebFilterChain<\/strong><strong>(ServerHttpSecurity http)<\/strong><strong> {<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong><strong>return<\/strong><strong> http.authorizeExchange()<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0 .pathMatchers(<\/strong><strong>\"\/actuator\/**\"<\/strong><strong>).permitAll()<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0 .anyExchange().authenticated()<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0 .and().build();}<\/strong>\r\n\r\n<\/pre>\n<h3><strong>Creating a New Endpoint<\/strong><\/h3>\n<p>In addition to using the existing endpoints provided by Spring Boot, we can also create an entirely new one<strong>.<\/strong><\/p>\n<p><strong>How to Create a New Endpoint<\/strong><\/p>\n<p>First, we need to have the new endpoint implement the <em>Endpoint&lt;T&gt;<\/em> interface. As shown in the code below:<\/p>\n<p>&nbsp;<\/p>\n<pre><strong>@Component<\/strong>\r\n\r\n<strong>public<\/strong> <strong>class<\/strong> <strong>CustomCreatedEndpoint<\/strong> <strong>implements<\/strong> <strong>Endpoint<\/strong><strong>&lt;List&lt;String&gt;&gt; {<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong><strong>@Override<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong><strong>public<\/strong><strong> String <\/strong><strong>getId<\/strong><strong>() {<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>return<\/strong> <strong>\"customEndpoint\"<\/strong><strong>;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 }<\/strong>\r\n\r\n<strong>\u00a0<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong><strong>@Override<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong><strong>public<\/strong> <strong>boolean<\/strong> <strong>isEnabled<\/strong><strong>() {<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>return<\/strong> <strong>true<\/strong><strong>;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 }<\/strong>\r\n\r\n<strong>\u00a0<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong><strong>@Override<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong><strong>public<\/strong> <strong>boolean<\/strong> <strong>isSensitive<\/strong><strong>() {<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>return<\/strong> <strong>true<\/strong><strong>;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 }<\/strong><\/pre>\n<p><strong>\u00a0<\/strong><\/p>\n<pre><strong>\u00a0\u00a0\u00a0 <\/strong><strong>@Override<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 <\/strong><strong>public<\/strong><strong> List&lt;String&gt; <\/strong><strong>invoke<\/strong><strong>() {<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>\/\/ Custom logic to build the output<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 List&lt;String&gt; messages = <\/strong><strong>new<\/strong> <strong>ArrayList<\/strong><strong>&lt;String&gt;();<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 messages.add(<\/strong><strong>\"This is message 1\"<\/strong><strong>);<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 messages.add(<\/strong><strong>\"This is message 2\"<\/strong><strong>);<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>return<\/strong><strong> messages;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 }<\/strong>\r\n\r\n<strong>}<\/strong><\/pre>\n<p>In order to access this new endpoint, its <em>id<\/em> is used to map it. In other words, we could exercise it by hitting <em>\/customCreatedEndpoint<\/em>.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>How To Enable Springboot Actuator:<\/strong><\/p>\n<p>To enable Spring Boot Actuator, we just need to add the <em>spring-boot-actuator<\/em> dependency to our package manager.<\/p>\n<p><strong>In Maven:<\/strong><\/p>\n<pre><strong>&lt;<\/strong><strong>dependency<\/strong><strong>&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 &lt;<\/strong><strong>groupId<\/strong><strong>&gt;org.springframework.boot&lt;\/<\/strong><strong>groupId<\/strong><strong>&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0 &lt;<\/strong><strong>artifactId<\/strong><strong>&gt;spring-boot-starter-actuator&lt;\/<\/strong><strong>artifactId<\/strong><strong>&gt;<\/strong>\r\n\r\n<strong>&lt;\/<\/strong><strong>dependency<\/strong><strong>&gt;<\/strong><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>The actuator is mainly used to expose operational information about the running application \u2014 health, metrics, info, dump, env, etc. It uses HTTP endpoints or JMX beans to enable us to interact with it. Once this dependency is on the classpath, several endpoints are available for us out of the box. The main benefit of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":7694,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[256,360],"tags":[852,722,853,851],"class_list":["post-7692","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-application","category-javascript","tag-actuator","tag-blog","tag-java-code","tag-springboot"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Boot Actuator - InnovationM - 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.innovationm.com\/blog\/spring-boot-actuator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot Actuator - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"The actuator is mainly used to expose operational information about the running application \u2014 health, metrics, info, dump, env, etc. It uses HTTP endpoints or JMX beans to enable us to interact with it. Once this dependency is on the classpath, several endpoints are available for us out of the box. The main benefit of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-20T05:50:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/04\/SpringBoot-Actuator.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1689\" \/>\n\t<meta property=\"og:image:height\" content=\"950\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\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.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"Spring Boot Actuator\",\"datePublished\":\"2023-04-20T05:50:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/\"},\"wordCount\":488,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/SpringBoot-Actuator.png\",\"keywords\":[\"actuator\",\"blog\",\"java code\",\"springboot\"],\"articleSection\":[\"Java Application\",\"JavaScript\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/\",\"name\":\"Spring Boot Actuator - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/SpringBoot-Actuator.png\",\"datePublished\":\"2023-04-20T05:50:24+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/SpringBoot-Actuator.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/SpringBoot-Actuator.png\",\"width\":1689,\"height\":950},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-actuator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot Actuator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Boot Actuator - InnovationM - 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.innovationm.com\/blog\/spring-boot-actuator\/","og_locale":"en_US","og_type":"article","og_title":"Spring Boot Actuator - InnovationM - Blog","og_description":"The actuator is mainly used to expose operational information about the running application \u2014 health, metrics, info, dump, env, etc. It uses HTTP endpoints or JMX beans to enable us to interact with it. Once this dependency is on the classpath, several endpoints are available for us out of the box. The main benefit of [&hellip;]","og_url":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/","og_site_name":"InnovationM - Blog","article_published_time":"2023-04-20T05:50:24+00:00","og_image":[{"width":1689,"height":950,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/04\/SpringBoot-Actuator.png","type":"image\/png"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"Spring Boot Actuator","datePublished":"2023-04-20T05:50:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/"},"wordCount":488,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/04\/SpringBoot-Actuator.png","keywords":["actuator","blog","java code","springboot"],"articleSection":["Java Application","JavaScript"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/","url":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/","name":"Spring Boot Actuator - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/04\/SpringBoot-Actuator.png","datePublished":"2023-04-20T05:50:24+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/04\/SpringBoot-Actuator.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/04\/SpringBoot-Actuator.png","width":1689,"height":950},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-actuator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Spring Boot Actuator"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/7692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=7692"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/7692\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/7694"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=7692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=7692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=7692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}