Home  >  Article  >  Java  >  How to execute Springboot after startup

How to execute Springboot after startup

WBOY
WBOYforward
2023-06-03 11:21:39900browse

1. Annotation @PostConstruct

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);
    }
}

2. CommandLineRunner interface

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));
    }
}

3. Implement the ApplicationRunner interface

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());
        }
    }
}

4. Implement ApplicationListener

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");
    }
}

5. The execution order of the four methods

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!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete