CommandLineRunner
In Spring, CommandLineRunner run right after the application is initialized. It will run only one time, and it is good for initialize values for your application. We can implement it in the root application class, or creating new class with @Component
on the top of it. We can have multiple CommandLineRunners, and we can use @Order(1)
, @Order(2)
, … to control the running order.
To implement CommandLineRunner, we need to overrider the following function, and the spring will call it automatically.
@Override public void run(String... args) throws Exception { ... }
Implement in the application main class
In this example, we create two users in our data source for our application for testing in the CommandLineRunner.
@SpringBootApplication public class MyApplication implements CommandLineRunner { @Autowired private ApplicationUserRepository applicationUserRepository; public static void main(String[] args) {SpringApplication.run(MyApplication .class, args);} @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } @Override public void run(String... args) throws Exception { applicationUserRepository.save(new ApplicationUser("user", bCryptPasswordEncoder().encode("password"), "USER")); applicationUserRepository.save(new ApplicationUser("admin", bCryptPasswordEncoder().encode("password"), "ADMIN")); } }
CommandLineRunner in other class
In order to let spring create your bean, you need to add @Component
at the top of your class. Without it, you class will not be create, and the CommandLineRunner will not be called.
Here we have two classes. In order to control the running order, we use @Order(1)
, @Order(2)
. Logically, we can have as many CommandLineRunner as you want.
@Component @Order(1) public class TestCmdRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("TESTING 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } }
@Component @Order(2) public class TestCmdRunner2 implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("TESTING 2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } }