Using the annotation @PostConstruct is the most common way. The problem is that if the executed method takes too long, the project will not be able to provide services during the execution of the method.
@Component public class StartInit { // // @Autowired 可以注入bean // ISysUserService userService; @PostConstruct public void init() throws InterruptedException { Thread.sleep(10*1000);//这里如果方法执行过长会导致项目一直无法提供服务 System.out.println(123456); } }
Implement the CommandLineRunner interface and then call the method that needs to be called in the run method. The advantage is that when the method is executed, the project has been initialized and services can be provided normally. .
At the same time, this method can also accept parameters, and can perform some processing based on the parameters passed in when the project is started: java -jar demo.jar arg1 arg2 arg3.
@Component public class CommandLineRunnerImpl implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println(Arrays.toString(args)); } }
The implementation methods of ApplicationRunner and CommandLineRunner are basically similar.
The only difference is the format of the parameters passed at startup. CommandLineRunner has no restrictions on the parameter format. The ApplicationRunner interface parameter format must be: –key=value
@Component public class ApplicationRunnerImpl implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { Set<String> optionNames = args.getOptionNames(); for (String optionName : optionNames) { List<String> values = args.getOptionValues(optionName); System.out.println(values.toString()); } } }
Implementing the interface ApplicationListener method and implementing the ApplicationRunner and CommandLineRunner interfaces do not affect the service and can provide services normally. Pay attention to the monitored events, usually ApplicationStartedEvent or ApplicationReadyEvent. Other events may not be injected into the bean.
@Component public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println("listener"); } }
The annotation method @PostConstruct is always executed first
If the ApplicationStartedEvent event is monitored, it will definitely be before the CommandLineRunner and ApplicationRunner implement.
If you are listening to the ApplicationReadyEvent event, it will definitely be executed after CommandLineRunner and ApplicationRunner.
CommandLineRunner and ApplicationRunner default to ApplicationRunner executing first. If both parties specify @Order, they will be executed in order of size of @Order, with the larger one executed first.
The above is the detailed content of How to execute Springboot after startup. For more information, please follow other related articles on the PHP Chinese website!