In
my previous post, I explained about ApplicationRunner and CommandLineRunner
interfaces. You can add multiple CommandLineRunner or ApplicationRunner
interfaces to the spring boot application.
ApplicationRunner2.java
CommandLineRunner1.java
CommandLineRunner2.java
MyBean.java
Application.java
How to execute the
runners in specific order?
By
implementing org.springframework.core.Ordered interface or using the
org.springframework.core.annotation.Order annotation, you can order the
execution of runners.
Using @Order
annotation
ApplicationRunner1.java
package com.sample.myApp.oneTimeExecutors; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(1) public class ApplicationRunner1 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("Application Runner 1"); } }
ApplicationRunner2.java
package com.sample.myApp.oneTimeExecutors; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(4) public class ApplicationRunner2 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("Application Runner 2"); } }
CommandLineRunner1.java
package com.sample.myApp.oneTimeExecutors; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(2) public class CommandLineRunner1 implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("Command line Runner 1"); } }
CommandLineRunner2.java
package com.sample.myApp.oneTimeExecutors; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(3) public class CommandLineRunner2 implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("Command line Runner 2"); } }
MyBean.java
package com.sample.myApp.model; import org.springframework.stereotype.Component; @Component public class MyBean { public MyBean() { System.out.println("************************"); System.out.println("Initializing the bean"); System.out.println("************************"); } }
Application.java
package com.sample.myApp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import com.sample.myApp.model.MyBean; @SpringBootApplication public class Application { public static void main(String args[]) { ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args); System.out.println("Initializaing bean first time"); applicationContext.getBean(MyBean.class); System.out.println("Initializaing bean second time"); applicationContext.getBean(MyBean.class); applicationContext.close(); } }
When
you ran ‘Application.java’, you can able to see below messages in the console.
Implementing Ordered
interface
ApplicationRunner1.java
package com.sample.myApp.oneTimeExecutors; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; @Component public class ApplicationRunner1 implements ApplicationRunner, Ordered { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("Application Runner 1"); } @Override public int getOrder() { return 1; } }
You
can update other classes ApplicationRunner2, CommandLineRunner1,
CommandLineRunner2 like above.
No comments:
Post a Comment