Utiliser l'annotation @PostConstruct est le moyen le plus courant. Le problème est que si la méthode exécutée prend trop de temps, le projet ne pourra pas fournir de services pendant l'exécution de la méthode.
@Component public class StartInit { // // @Autowired 可以注入bean // ISysUserService userService; @PostConstruct public void init() throws InterruptedException { Thread.sleep(10*1000);//这里如果方法执行过长会导致项目一直无法提供服务 System.out.println(123456); } }
Implémentez l'interface CommandLineRunner puis appelez la méthode qui doit être appelée dans la méthode run L'avantage est que lorsque la méthode est exécutée, le projet a été initialisé et les services peuvent être fournis normalement.
En même temps, cette méthode peut également accepter des paramètres et effectuer certains traitements basés sur les paramètres transmis au démarrage du projet : 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)); } }
Les méthodes d'implémentation d'ApplicationRunner et de CommandLineRunner sont fondamentalement similaires.
La seule différence est le format des paramètres transmis au démarrage. CommandLineRunner n'a aucune restriction sur le format des paramètres. Le format du paramètre d'interface ApplicationRunner doit être : –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()); } } }
Implémenter l'interface ApplicationListener. et implémentez ApplicationRunner. L'interface CommandLineRunner n'affecte pas le service et peut fournir des services normalement. Faites attention aux événements surveillés, généralement ApplicationStartedEvent ou ApplicationReadyEvent. Les autres événements ne peuvent pas être injectés dans le bean.
@Component public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println("listener"); } }
La méthode d'annotation @PostConstruct est toujours exécutée en premier
Si l'événement ApplicationStartedEvent est surveillé, il sera certainement exécuté avant CommandLineRunner et ApplicationRunner.
Si vous écoutez l'événement ApplicationReadyEvent, il sera définitivement exécuté après CommandLineRunner et ApplicationRunner.
CommandLineRunner et ApplicationRunner s'exécutent par défaut en premier. Si les deux parties spécifient @Order, elles seront exécutées par ordre de taille de @Order, le plus grand étant exécuté en premier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!