{"id":67275,"date":"2017-07-05T16:00:45","date_gmt":"2017-07-05T13:00:45","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=67275"},"modified":"2017-07-05T14:13:31","modified_gmt":"2017-07-05T11:13:31","slug":"simple-spring-boot-admin-setup","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html","title":{"rendered":"Simple Spring Boot Admin Setup"},"content":{"rendered":"<p>Spring Boot Admin is a cool dashboard for monitoring your spring boot applications. However, setting it up is not that trivial. <a href=\"https:\/\/codecentric.github.io\/spring-boot-admin\/1.5.0\/\">The documentation outlines two options<\/a>:<\/p>\n<ul>\n<li>Including a client library in your boot application that connects to the admin application \u2013 this requires having the admin application deployed somewhere public or at least reachable from your application, and also making your application aware that it is being monitored.<\/li>\n<li>Using cloud discovery, which means your application is part of a service discovery infrastructure, e.g. using microservices<\/li>\n<\/ul>\n<p>Both are not very good options for simpler scenarios like a <a href=\"https:\/\/www.javacodegeeks.com\/2015\/10\/in-defence-of-monoliths.html\">monolithic application<\/a> being run on some IaaS and having your admin application deployed either on a local machine or in some local company infrastructure. Cloud discovery is an overkill if you don\u2019t already need it, and including a client library introduces the complexity of making the admin server reachable by your application, rather than vice-versa. And besides, this two-way dependency sounds wrong.<\/p>\n<p>Fortunately, there is an undocumented, but implemented <code>SimpleDiscoveryClient<\/code> that let\u2019s you simply run the Spring Boot Admin with some configuration on whatever machine and connect it to your spring boot application.<\/p>\n<p>The first requirement is to have the <a href=\"https:\/\/spring.io\/guides\/gs\/actuator-service\/\">spring boot actuator<\/a> setup in your boot application. The Actuator exposes all the needed endpoints for the admin application to work. It sounds trivial to setup \u2013 you just add a bunch of dependencies and possibly specify some config parameters and that\u2019s it. In fact, in a real application it\u2019s not that easy \u2013 in particular regarding the basic authentication for the actuator endpoints. You need a separate spring-security (in addition to your existing spring-security configuration) in order to apply basic auth only to the actuator endpoints. E.g.:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:java; wrap-lines:false\">@Configuration\r\n@Order(99) \/\/ the default security configuration has order 100\r\npublic class ActuatorSecurityConfiguration extends WebSecurityConfigurerAdapter {\r\n\r\n    @Value(\"${security.user.name}\")\r\n    private String username;\r\n    \r\n    @Value(\"${security.user.password}\")\r\n    private String password;\r\n    \r\n    @Override\r\n    protected void configure(HttpSecurity http) throws Exception {\r\n        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();\r\n        manager.createUser(User.withUsername(username).password(password).roles(\"ACTUATOR\",\"ADMIN\").build());\r\n        \r\n        http.antMatcher(\"\/manage\/**\").authorizeRequests().anyRequest().hasRole(\"ACTUATOR\").and().httpBasic()\r\n                .and().userDetailsService(manager);\r\n    }\r\n}<\/pre>\n<p>This is a bit counterintuitive, but it works. Not sure if it\u2019s idiomatic \u2013 with spring security and spring boot you never know what is idiomatic. Note \u2013 allegedly it should be possible to have the <code>security.user.name<\/code> (and password) automatically included in some manager, but I failed to find such, so I just instantiated an in-memory one. Note the <code>\/manage\/**<\/code> path \u2013 in order to have all the actuator endpoints under that path, you need to specify the <code>management.context-path=\/manage<\/code> in your application properties file.<\/p>\n<p>Now that the actuator endpoints are setup, we have to attach our spring admin application. It looks like that:<\/p>\n<pre class=\"brush:java\">@Configuration\r\n@EnableAutoConfiguration\r\n@PropertySource(\"classpath:\/application.properties\")\r\n@EnableAdminServer\r\npublic class BootAdminApplication {\r\n    public static void main(String[] args) {\r\n        SpringApplication.run(BootAdminApplication.class, args);\r\n    }\r\n\r\n    @Autowired\r\n    private ApplicationDiscoveryListener listener;\r\n    \r\n    @PostConstruct\r\n    public void init() {\r\n        \/\/ we have to fire this event in order to trigger the service registration\r\n        InstanceRegisteredEvent&lt;?&gt; event = new InstanceRegisteredEvent&lt;&gt;(\"prod\", null);\r\n        \/\/ for some reason publising doesn't work, so we invoke directly\r\n        listener.onInstanceRegistered(event);\r\n    }\r\n}<\/pre>\n<p>Normally, one should inject <code>ApplicationEventPublisher<\/code> and push the message there rather than directly invoking the listener as shown above. I didn\u2019t manage to get it working easily, so I worked around that.<\/p>\n<p>The application.properties file mentioned about should be in src\/main\/resources and looks like that:<\/p>\n<pre class=\"brush:bash\">spring.cloud.discovery.client.simple.instances.prod[0].uri=https:\/\/your-spring-boot-application-url.com\r\nspring.cloud.discovery.client.simple.instances.prod[0].metadata.user.name=&lt;basic-auth-username&gt;\r\nspring.cloud.discovery.client.simple.instances.prod[0].metadata.user.password=&lt;basic-auth-password&gt;\r\nspring.boot.admin.discovery.converter.management-context-path=\/manage\r\nspring.boot.admin.discovery.services=*<\/pre>\n<p>What is that doing? It\u2019s using the <code>SimpleDiscoveryClient<\/code> that gets instantiated by the autoconfiguration. Actually, that client didn\u2019t work until the latest version \u2013 it threw NullPointerException because the metadata (which handles the username and password) was always null. In 1.2.2 of the cloud-commons they fixed it:<\/p>\n<pre class=\"brush:xml\">&lt;dependency&gt;\r\n\t&lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\r\n\t&lt;artifactId&gt;spring-cloud-commons&lt;\/artifactId&gt;\r\n\t&lt;version&gt;1.2.2.RELEASE&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p>The simple discovery client is exactly that \u2013 you specify the URL of your boot application and it fetches the data form the actuator endpoints periodically. Why that isn\u2019t documented and why it didn\u2019t actually work until very recently \u2013 I have no idea. Also, I don\u2019t know why you have to manually send the event that triggers discovery. Maybe it\u2019s not idiomatic, but it doesn\u2019t happen automatically and that made it work.<\/p>\n<p>As usual with things that \u201cjust work\u201d and have \u201csimple setups\u201d \u2013 it\u2019s never like that. If you have something slightly more complex than a hello world, you have to dig some obscure classes and go \u201coff-road\u201d. Luckily in this case, it actually works, rather than needed ugly workarounds.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"https:\/\/techblog.bozho.net\/simple-spring-boot-admin-setup\/\">Simple Spring Boot Admin Setup<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/join-us\/jcg\/\">JCG partner<\/a> Bozhidar Bozhanov at the <a href=\"http:\/\/techblog.bozho.net\/\">Bozho&#8217;s tech blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Spring Boot Admin is a cool dashboard for monitoring your spring boot applications. However, setting it up is not that trivial. The documentation outlines two options: Including a client library in your boot application that connects to the admin application \u2013 this requires having the admin application deployed somewhere public or at least reachable from &hellip;<\/p>\n","protected":false},"author":55,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[854],"class_list":["post-67275","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-spring-boot"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Simple Spring Boot Admin Setup - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Spring Boot Admin is a cool dashboard for monitoring your spring boot applications. However, setting it up is not that trivial. The documentation outlines\" \/>\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.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Simple Spring Boot Admin Setup - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Spring Boot Admin is a cool dashboard for monitoring your spring boot applications. However, setting it up is not that trivial. The documentation outlines\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2017-07-05T13:00:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Bozhidar Bozhanov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bozhidar Bozhanov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html\"},\"author\":{\"name\":\"Bozhidar Bozhanov\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/1eaacbb8d159c99fd32e6b51198a1e79\"},\"headline\":\"Simple Spring Boot Admin Setup\",\"datePublished\":\"2017-07-05T13:00:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html\"},\"wordCount\":627,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"Spring Boot\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html\",\"name\":\"Simple Spring Boot Admin Setup - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2017-07-05T13:00:45+00:00\",\"description\":\"Spring Boot Admin is a cool dashboard for monitoring your spring boot applications. However, setting it up is not that trivial. The documentation outlines\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/07\\\/simple-spring-boot-admin-setup.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Simple Spring Boot Admin Setup\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/1eaacbb8d159c99fd32e6b51198a1e79\",\"name\":\"Bozhidar Bozhanov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"caption\":\"Bozhidar Bozhanov\"},\"description\":\"Senior Java developer, one of the top stackoverflow users, fluent with Java and Java technology stacks - Spring, JPA, JavaEE, as well as Android, Scala and any framework you throw at him. creator of Computoser - an algorithmic music composer. Worked on telecom projects, e-government and large-scale online recruitment and navigation platforms.\",\"sameAs\":[\"http:\\\/\\\/techblog.bozho.net\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/bozhidar-bozhanov\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Simple Spring Boot Admin Setup - Java Code Geeks","description":"Spring Boot Admin is a cool dashboard for monitoring your spring boot applications. However, setting it up is not that trivial. The documentation outlines","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.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html","og_locale":"en_US","og_type":"article","og_title":"Simple Spring Boot Admin Setup - Java Code Geeks","og_description":"Spring Boot Admin is a cool dashboard for monitoring your spring boot applications. However, setting it up is not that trivial. The documentation outlines","og_url":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2017-07-05T13:00:45+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Bozhidar Bozhanov","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Bozhidar Bozhanov","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html"},"author":{"name":"Bozhidar Bozhanov","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/1eaacbb8d159c99fd32e6b51198a1e79"},"headline":"Simple Spring Boot Admin Setup","datePublished":"2017-07-05T13:00:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html"},"wordCount":627,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["Spring Boot"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html","url":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html","name":"Simple Spring Boot Admin Setup - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2017-07-05T13:00:45+00:00","description":"Spring Boot Admin is a cool dashboard for monitoring your spring boot applications. However, setting it up is not that trivial. The documentation outlines","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2017\/07\/simple-spring-boot-admin-setup.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Simple Spring Boot Admin Setup"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/1eaacbb8d159c99fd32e6b51198a1e79","name":"Bozhidar Bozhanov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","caption":"Bozhidar Bozhanov"},"description":"Senior Java developer, one of the top stackoverflow users, fluent with Java and Java technology stacks - Spring, JPA, JavaEE, as well as Android, Scala and any framework you throw at him. creator of Computoser - an algorithmic music composer. Worked on telecom projects, e-government and large-scale online recruitment and navigation platforms.","sameAs":["http:\/\/techblog.bozho.net\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/bozhidar-bozhanov"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/67275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=67275"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/67275\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=67275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=67275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=67275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}