{"id":107317,"date":"2020-10-24T15:15:00","date_gmt":"2020-10-24T12:15:00","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=107317"},"modified":"2020-10-23T10:54:48","modified_gmt":"2020-10-23T07:54:48","slug":"run-method-on-spring-boot-startup","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html","title":{"rendered":"Run method on Spring Boot startup"},"content":{"rendered":"<p>While developing a spring boot application, sometimes we need to run a method or a piece of code at startup.&nbsp;This code can be anything ranging from, logging certain information to setting up database,&nbsp;cron&nbsp;jobs etc. We cannot just put this code in constructor, because required variables or servies may not be initialized yet. This could lead to null pointers or some other exceptions.<\/p>\n<h2 class=\"wp-block-heading\">Why do we need to run code at spring boot startup?<\/h2>\n<p>We need to run method at application startup for many reasons like,<\/p>\n<ul class=\"wp-block-list\">\n<li>Logging important things or message saying application is started<\/li>\n<li>Processing database or files, indexing, creating caches&nbsp;etc.<\/li>\n<li>Starting background process like sending notification, fetching data form some queue,&nbsp;etc.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Different ways to run method after startup in spring boot<\/h2>\n<p>Each way has its own benefits. Let\u2019s look in detail to decide which we should use,<\/p>\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/run-method-on-startup#command-line-runner\">Using CommandLineRunner interface<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/run-method-on-startup#application-runner\">With ApplicationRunner interface<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/run-method-on-startup#application-event\">Spring boot Application events<\/a><\/li>\n<li><a href=\"#postconstruct-annotation\">@Postconstruct annotation on a method<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/run-method-on-startup#initializing-bean-interface\">The&nbsp;InitializingBean&nbsp;Interface<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/run-method-on-startup#init-attribute-of-bean\">Init attribute of @bean annotation<\/a><\/li>\n<\/ol>\n<h2 class=\"wp-block-heading\">1.&nbsp;Using CommandLineRunner interface<\/h2>\n<p>CommandLineRunner&nbsp;is a spring boot <a href=\"https:\/\/stacktraceguru.com\/java-8-functional-interface\">functional interface<\/a> which is used to run code at application startup. It is present under package&nbsp;org.springframework.boot.<\/p>\n<p>In startup process after the&nbsp;context is initialized, spring boot calls its run() method with command-line arguments provided to the application.&nbsp;<\/p>\n<p>To inform spring boot about our&nbsp;commandlineRunner&nbsp;interface, we can either implement it and add @Component annotation above the class or create its bean using @bean.<\/p>\n<h3 class=\"wp-block-heading\">Example of implementing CommandLineRunner interface<\/h3>\n<div>\n<div id=\"highlighter_612132\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java color1\">@Component<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">CommandLineRunnerImpl <\/code><code class=\"java keyword\">implements<\/code> <code class=\"java plain\">CommandLineRunner {<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Override<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">run(String... args) <\/code><code class=\"java keyword\">throws<\/code> <code class=\"java plain\">Exception {<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"In CommandLineRunnerImpl \"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">for<\/code> <code class=\"java plain\">(String arg : args) {<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(arg);<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3 class=\"wp-block-heading\">Example of creating bean of CommandLineRunner interface<\/h3>\n<div>\n<div id=\"highlighter_430308\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java color1\">@SpringBootApplication<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">Application {<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">static<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">main(String[] args) {<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">SpringApplication.run(Application.<\/code><code class=\"java keyword\">class<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Bean<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">CommandLineRunner CommandLineRunnerBean() {<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">(args) -&gt; {<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"In CommandLineRunnerImpl \"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number12 index11 alt1\">&nbsp;<\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">for<\/code> <code class=\"java plain\">(String arg : args) {<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(arg);<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">};<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We can run application using command line or IDE. Let\u2019s take an example when we run the application using arguments as \u201c\u2013status=running\u201d<\/p>\n<div>\n<div id=\"highlighter_1140\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">mvn spring-boot:run -Dspring-boot.run.arguments=<\/code><code class=\"c string\">\"--status=running\"<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>OR<\/p>\n<div>\n<div id=\"highlighter_832784\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">mvn package <\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c plain\">java -jar target\/&lt;FILENAME.JAR HERE&gt; --status=running<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>This will produce the following log output:<\/p>\n<div>\n<div id=\"highlighter_7035\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">In CommandLineRunnerImpl<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c plain\">status=running<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>As we can see, the parameter is not parsed but instead interpreted as a single value \u201cstatus=running\u201d.<\/p>\n<p>To access command line arguments in parsed format we need to use ApplicationRunner interface. We shall look at it shortly.<\/p>\n<p>Spring Boot adds&nbsp;CommandLineRunner interface into the startup process. Hence throwing exception in&nbsp;commandlinerRunner&nbsp;will force Spring boot to abort startup.<\/p>\n<p>We can create multiple&nbsp;CommandLineRunners&nbsp;in one application. Using the Ordered interface or @Order annotation we can configure the order in which they should run. Lower value means higher the priority. By default all the components are created with lowest priority. That is why components without order configuration will be called last.<\/p>\n<p>We can use order annotation as shown below<\/p>\n<div>\n<div id=\"highlighter_889500\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java color1\">@Component<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java color1\">@Order<\/code><code class=\"java plain\">(<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">CommandLineRunnerImpl <\/code><code class=\"java keyword\">implements<\/code> <code class=\"java plain\">CommandLineRunner {<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">........<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">2. With ApplicationRunner Interface<\/h2>\n<p>As discussed earlier, to access parsed arguments we need to use ApplicationRunner interface. ApplicationRunner interface provides run method with ApplicationArguments instead of raw string array.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>ApplicationArguments&nbsp;is an interface which is available from srping boot 1.3 under the package org.springframework.boot.<\/p>\n<p>It provides different ways to access the&nbsp;arguments&nbsp;as below<\/p>\n<figure>\n<table border=\"1\">\n<tbody>\n<tr>\n<td>String[]&nbsp;GetSourceArgs()<\/td>\n<td>Gives unprocessed arguments that were passed to the application<\/td>\n<\/tr>\n<tr>\n<td>Set&lt;String&gt;&nbsp;getOptionNames()<\/td>\n<td>Names of all optional arguments, optional arguments are preceded by <strong>\u201c<strong>\u2014<\/strong>\u201c<\/strong> eg: \u2013name= \u201cstacktrace\u201d<\/td>\n<\/tr>\n<tr>\n<td>List&lt;String&gt;&nbsp;getNonOptionArgs()<\/td>\n<td>Returns unprocessed non-optional arguments. Arguments without <strong>\u201c<strong>\u2014<\/strong>\u201c<\/strong><\/td>\n<\/tr>\n<tr>\n<td>boolean&nbsp;containsOption(String name)&nbsp;<\/td>\n<td>Checks if name is present in the optional arguments or not<\/td>\n<\/tr>\n<tr>\n<td>List&lt;String&gt;&nbsp;getOptionValues(String name)<\/td>\n<td>Gives the argument value by name<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Method&nbsp;getOptionValues returns value list because,&nbsp;the argument value can be array as we can use same key more than once in the command-line.<br \/>For example <strong>\u2013name<\/strong>= \u201cstacktrace\u201d \u2014 Port=8080 <strong>\u2013name<\/strong>=\u201dguru\u201d<\/p>\n<h3 class=\"wp-block-heading\">Example of Application runner as interface implementation<\/h3>\n<p>Let\u2019s run the program below using \u201cstatus=running \u2013mood=happy 10 \u201320\u201d arguments and let\u2019s understand the output<\/p>\n<div>\n<div id=\"highlighter_664451\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java color1\">@Component<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">ApplicationRunnerImpl <\/code><code class=\"java keyword\">implements<\/code> <code class=\"java plain\">ApplicationRunner {<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Override<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">run(ApplicationArguments args) <\/code><code class=\"java keyword\">throws<\/code> <code class=\"java plain\">Exception {<\/code><\/div>\n<div class=\"line number6 index5 alt1\">&nbsp;<\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"ApplicationRunnerImpl Called\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number8 index7 alt1\">&nbsp;<\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java comments\">\/\/print all arguemnts: arg: status=running, arg: --mood=happy, 10, --20<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">for<\/code> <code class=\"java plain\">(String arg : args.getSourceArgs()) {<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"arg: \"<\/code><code class=\"java plain\">+arg);<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"NonOptionArgs: \"<\/code><code class=\"java plain\">+args.getNonOptionArgs()); <\/code><code class=\"java comments\">\/\/[status=running,10]<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"OptionNames: \"<\/code><code class=\"java plain\">+args.getOptionNames());&nbsp; <\/code><code class=\"java comments\">\/\/[mood, 20]<\/code><\/div>\n<div class=\"line number15 index14 alt2\">&nbsp;<\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"Printing key and value in loop:\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">for<\/code> <code class=\"java plain\">(String key : args.getOptionNames()) {<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"key: \"<\/code><code class=\"java plain\">+key);&nbsp;&nbsp;&nbsp;&nbsp; <\/code><code class=\"java comments\">\/\/key: mood&nbsp; \/\/key: 20<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"val: \"<\/code><code class=\"java plain\">+args.getOptionValues(key)); <\/code><code class=\"java comments\">\/\/val:[happy] \/\/val:[]<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Output:<\/p>\n<div>\n<div id=\"highlighter_143380\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">ApplicationRunnerImpl Called<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c plain\">arg: status=running<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"c plain\">arg: --mood=happ<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"c plain\">arg: 10<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"c plain\">arg: --20<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"c plain\">NonOptionArgs: [status=running , 10]<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"c plain\">OptionNames: [mood, 20]<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"c plain\">Printing key and value in loop:<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"c plain\">key: mood<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"c plain\">val: [happy]<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"c plain\">key: 20<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"c plain\">val: []<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>CommandLineRunner&nbsp;and&nbsp;ApplicationRunner&nbsp;have similar features like<\/p>\n<ul class=\"wp-block-list\">\n<li>An exception in the run() method will abort application startup&nbsp;<\/li>\n<li>Several&nbsp;ApplicationRunners&nbsp;can be ordered using Ordered interface or @Order annotation<\/li>\n<\/ul>\n<p>Most important point to note that the Order is shared between CommandLineRunners and ApplicationRunners. That means the execution order could be mixed between commandlinerRunner and applicationRunner.<\/p>\n<h2 class=\"wp-block-heading\">3. Application event in Spring Boot<\/h2>\n<p>Spring framework triggers different events in different situations. It also triggers many events in startup process. We can use these events to execute our code, for example ApplicationReadyEvent&nbsp;can be used to execute code after spring boot application starts up.<\/p>\n<p>If we don\u2019t need command-line arguments, this is the best way to execute code after application starts up.<\/p>\n<div>\n<div id=\"highlighter_549285\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java color1\">@Component<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">RunAfterStartup{<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java color1\">@EventListener<\/code><code class=\"java plain\">(ApplicationReadyEvent.<\/code><code class=\"java keyword\">class<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">runAfterStartup() {<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"Yaaah, I am running........\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Output:<\/p>\n<div>\n<div id=\"highlighter_269241\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">Yaaah, I am running........<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Some most important events in spring boot are,<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>ApplicationContextInitializedEvent&nbsp;<\/strong>: triggered after&nbsp;ApplicationContext&nbsp;is prepared and&nbsp;ApplicationContextInitializers&nbsp;are called but before bean definitions are loaded<\/li>\n<li><strong>ApplicationPreparedEvent&nbsp;<\/strong>: triggered after bean definitions are loaded<\/li>\n<li><strong>ApplicationStartedEvent&nbsp;<\/strong>: triggered after context has been refreshed but before command-line and application runners are called<\/li>\n<li><strong>ApplicationReadyEvent&nbsp;<\/strong>:&nbsp;triggered after any application and command-line runners are called<\/li>\n<li><strong>ApplicationFailedEvent&nbsp;<\/strong>: triggered if there is an exception on startup<\/li>\n<\/ul>\n<p>Multiple&nbsp;ApplicationListeners&nbsp;can be created. They can be ordered with the @Order annotation&nbsp;or Ordered&nbsp;interface.<\/p>\n<p>The order is shared with other same type of ApplicationListeners but not with ApplicationRunners or CommandLineRunners.<\/p>\n<h2 class=\"wp-block-heading\">4. @Postconstruct annotation on a method<\/h2>\n<p>A method can be marked with @PostConstruct annotation. Whenever a method is marked with this annotation, it will be called immediately after the dependency injection.<\/p>\n<p>A @PostConstruct method is linked to specific class hence it should be used for class specific code only. There can only be one method per class with&nbsp;postConstruct&nbsp;annotation.<\/p>\n<div>\n<div id=\"highlighter_202192\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">@Component<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c keyword bold\">public<\/code> <code class=\"c keyword bold\">class<\/code> <code class=\"c plain\">PostContructImpl {<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c keyword bold\">public<\/code> <code class=\"c plain\">PostContructImpl() {<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">System.out.println(<\/code><code class=\"c string\">\"PostContructImpl Constructor called\"<\/code><code class=\"c plain\">);<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">}<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">@PostConstruct<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c keyword bold\">public<\/code> <code class=\"c keyword bold\">void<\/code> <code class=\"c plain\">runAfterObjectCreated() {<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">System.out.println(<\/code><code class=\"c string\">\"PostContruct method called\"<\/code><code class=\"c plain\">);<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">}<\/code><\/div>\n<div class=\"line number12 index11 alt1\">&nbsp;<\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"c plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Output:<\/p>\n<div>\n<div id=\"highlighter_787403\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">PostContructImpl Constructor called<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c plain\">postContruct method called<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Point to note is that if class is marked as lazy, that means the class is created when requested. After that the method marked with @postConstruct annotation will be executed.<\/p>\n<p>The method marked with&nbsp;postConstruct&nbsp;annotation can have any name, however must not have any parameters. It must be void and should not be static.<\/p>\n<p>Please note that @postConstruct annotation is part of Java EE module and it is marked as deprecated in Java 9 and removed in Java 11. We can still use it by adding java.se.ee into the application.<\/p>\n<h2 class=\"wp-block-heading\">5. The&nbsp;InitializingBean&nbsp;Interface<\/h2>\n<p>The&nbsp;InitializingBean&nbsp;solution works exactly the similar to the postConstruct annotation. Instead of using annotation we have to implement an InitializingBean interface. Then we need to override void afterPropertiesSet() method.<\/p>\n<p>InitializingBean&nbsp;is a part of&nbsp;org.springframework.beans.factory&nbsp;package.<\/p>\n<div>\n<div id=\"highlighter_445043\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java color1\">@Component<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">InitializingBeanImpl <\/code><code class=\"java keyword\">implements<\/code> <code class=\"java plain\">InitializingBean {<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">InitializingBeanImpl() {<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"InitializingBeanImpl Constructor called\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Override<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">afterPropertiesSet() <\/code><code class=\"java keyword\">throws<\/code> <code class=\"java plain\">Exception {<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"InitializingBeanImpl afterPropertiesSet method called\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>You must be thinking what happens if we use both @PostConstruct annotation and&nbsp;InitializingBean together. Well in that case @PostConstruct&nbsp;method will be called before the InitializingBean\u2019s afterPropertiesSet() method.<\/p>\n<h2 class=\"wp-block-heading\">6. Init attribute of @bean annotation<\/h2>\n<p>We can provide a method using&nbsp;initMethod&nbsp;property in the @Bean annotation. This method will becalled after bean is initialized.<\/p>\n<p>The method provided in&nbsp;initMethod&nbsp;must be void and should not have any arguments. This method can even be private.<\/p>\n<div>\n<div id=\"highlighter_314029\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">BeanInitMethodImpl {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;<\/code>&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">runAfterObjectCreated() {<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(<\/code><code class=\"java string\">\"yooooooooo......... someone called me\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">} <\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java color1\">@SpringBootApplication<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">class<\/code> <code class=\"java plain\">DemoApplication {<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">static<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">main(String[] args) {<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">SpringApplication.run(DemoApplication.<\/code><code class=\"java keyword\">class<\/code><code class=\"java plain\">, args);<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number13 index12 alt2\">&nbsp;<\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Bean<\/code><code class=\"java plain\">(initMethod=<\/code><code class=\"java string\">\"runAfterObjectCreated\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">BeanInitMethodImpl getFunnyBean() {<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java keyword\">new<\/code> <code class=\"java plain\">BeanInitMethodImpl();<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Output:<\/p>\n<div>\n<div id=\"highlighter_831587\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">yooooooooo......... someone called me<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>If you have InitializingBean implementation and initMethod&nbsp;property of @Bean annotation for the same class, then afterPropertiesSet&nbsp;method of InitializingBean will be called befor ehte initMethod.<\/p>\n<h2 class=\"wp-block-heading\">Combining different approaches:<\/h2>\n<p>Lastly, sometimes we may need to combine&nbsp;multiple options. Then&nbsp;they will execute in the&nbsp;following order,<\/p>\n<ul class=\"wp-block-list\">\n<li>Constructor<\/li>\n<li>PostContruct&nbsp;method<\/li>\n<li>afterPropertiesSet&nbsp;method<\/li>\n<li>Bean&nbsp;init&nbsp;Method<\/li>\n<li>ApplicationStartedEvent<\/li>\n<li>ApplicationRunner&nbsp;Or&nbsp;CommandLineRunner&nbsp;depends on Order<\/li>\n<li>ApplicationReadyEvent<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Fast track reading<\/h3>\n<ul class=\"wp-block-list\">\n<li>There are different ways to run code after spring boot application startup<\/li>\n<li>We can use CommandLineRunner or ApplicationRunner Interface<\/li>\n<li>Use ApplicationRunner interface to access parsed arguments&nbsp;&nbsp;instead of raw string array<\/li>\n<li>Spring boot event executes code on application startup<\/li>\n<li>Method marked with @PostConstruct annotation executes after the object initialization<\/li>\n<li>afterPropertiesSet() method of InitializingBean&nbsp;Interfacecalled after the object initialization<\/li>\n<li>@Bean annotation has an attribute \u2018initMethod\u2019 to provide method which will be called after bean initialization<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Related topics<\/h3>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/spring.io\/guides\/gs\/spring-boot\/\">Spring boot project setup guide<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/introduction\u2028\">Springboot introduction tutorial<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/spring-data-jpa\">Beginner tutorial for Spring data Java<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/nested-object-query\">Method name to nested object query<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/custom-banner\">Spring boot custom banner generation<\/a><\/li>\n<\/ul>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Stacktraceguru, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/stacktraceguru.com\/springboot\/run-method-on-startup\" target=\"_blank\" rel=\"noopener noreferrer\">Run method on Spring Boot startup<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>While developing a spring boot application, sometimes we need to run a method or a piece of code at startup.&nbsp;This code can be anything ranging from, logging certain information to setting up database,&nbsp;cron&nbsp;jobs etc. We cannot just put this code in constructor, because required variables or servies may not be initialized yet. This could lead &hellip;<\/p>\n","protected":false},"author":116473,"featured_media":240,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[854],"class_list":["post-107317","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>Run method on Spring Boot startup - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"While developing a spring boot application, sometimes we need to run a method or a piece of code at startup.&nbsp;This code can be anything ranging from,\" \/>\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\/2020\/10\/run-method-on-spring-boot-startup.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Run method on Spring Boot startup - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"While developing a spring boot application, sometimes we need to run a method or a piece of code at startup.&nbsp;This code can be anything ranging from,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.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:author\" content=\"www.facebook.com\/Stacktraceguru\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-24T12:15:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-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=\"Stacktraceguru\" \/>\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=\"Stacktraceguru\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html\"},\"author\":{\"name\":\"Stacktraceguru\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/08690a509ef2e0bc8bc98ddc16bb291d\"},\"headline\":\"Run method on Spring Boot startup\",\"datePublished\":\"2020-10-24T12:15:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html\"},\"wordCount\":1375,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"keywords\":[\"Spring Boot\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html\",\"name\":\"Run method on Spring Boot startup - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"datePublished\":\"2020-10-24T12:15:00+00:00\",\"description\":\"While developing a spring boot application, sometimes we need to run a method or a piece of code at startup.&nbsp;This code can be anything ranging from,\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"spring-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/10\\\/run-method-on-spring-boot-startup.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\":\"Run method on Spring Boot startup\"}]},{\"@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\\\/08690a509ef2e0bc8bc98ddc16bb291d\",\"name\":\"Stacktraceguru\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g\",\"caption\":\"Stacktraceguru\"},\"description\":\"Stacktraceguru is an educational website. This website helps software programmers to learn and clarify concepts.\",\"sameAs\":[\"https:\\\/\\\/stacktraceguru.com\\\/\",\"www.facebook.com\\\/Stacktraceguru\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/stacktraceguru\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Run method on Spring Boot startup - Java Code Geeks","description":"While developing a spring boot application, sometimes we need to run a method or a piece of code at startup.&nbsp;This code can be anything ranging from,","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\/2020\/10\/run-method-on-spring-boot-startup.html","og_locale":"en_US","og_type":"article","og_title":"Run method on Spring Boot startup - Java Code Geeks","og_description":"While developing a spring boot application, sometimes we need to run a method or a piece of code at startup.&nbsp;This code can be anything ranging from,","og_url":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_author":"www.facebook.com\/Stacktraceguru\/","article_published_time":"2020-10-24T12:15:00+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","type":"image\/jpeg"}],"author":"Stacktraceguru","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Stacktraceguru","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html"},"author":{"name":"Stacktraceguru","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/08690a509ef2e0bc8bc98ddc16bb291d"},"headline":"Run method on Spring Boot startup","datePublished":"2020-10-24T12:15:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html"},"wordCount":1375,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","keywords":["Spring Boot"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html","url":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html","name":"Run method on Spring Boot startup - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","datePublished":"2020-10-24T12:15:00+00:00","description":"While developing a spring boot application, sometimes we need to run a method or a piece of code at startup.&nbsp;This code can be anything ranging from,","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","width":150,"height":150,"caption":"spring-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2020\/10\/run-method-on-spring-boot-startup.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":"Run method on Spring Boot startup"}]},{"@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\/08690a509ef2e0bc8bc98ddc16bb291d","name":"Stacktraceguru","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g","caption":"Stacktraceguru"},"description":"Stacktraceguru is an educational website. This website helps software programmers to learn and clarify concepts.","sameAs":["https:\/\/stacktraceguru.com\/","www.facebook.com\/Stacktraceguru\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/stacktraceguru"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/107317","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\/116473"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=107317"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/107317\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/240"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=107317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=107317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=107317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}