Die Verwendung der Annotation @PostConstruct ist die häufigste Methode. Das Problem besteht darin, dass das Projekt während der Ausführung der Methode keine Dienste bereitstellen kann.
@Component public class StartInit { // // @Autowired 可以注入bean // ISysUserService userService; @PostConstruct public void init() throws InterruptedException { Thread.sleep(10*1000);//这里如果方法执行过长会导致项目一直无法提供服务 System.out.println(123456); } }
Implementieren Sie die CommandLineRunner-Schnittstelle und rufen Sie dann die Methode auf, die in der Ausführungsmethode aufgerufen werden muss. Der Vorteil besteht darin, dass das Projekt initialisiert wurde und Dienste normal bereitgestellt werden können.
Gleichzeitig kann diese Methode auch Parameter akzeptieren und einige Verarbeitungen basierend auf den beim Starten des Projekts übergebenen Parametern durchführen: 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)); } }
Die Implementierungsmethoden von ApplicationRunner und CommandLineRunner sind grundsätzlich ähnlich.
Der einzige Unterschied besteht darin, dass beim Start von CommandLineRunner keine Einschränkungen hinsichtlich des Parameterformats bestehen: –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()); } } }
@Component public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println("listener"); } }
5. Die Ausführungsreihenfolge der vier Methoden
Wenn das ApplicationStartedEvent-Ereignis überwacht wird, wird es definitiv vor CommandLineRunner und ApplicationRunner ausgeführt.
Wenn Sie das ApplicationReadyEvent-Ereignis abhören, wird es definitiv nach CommandLineRunner und ApplicationRunner ausgeführt.
CommandLineRunner und ApplicationRunner führen standardmäßig ApplicationRunner zuerst aus. Wenn beide Parteien @Order angeben, werden sie in der Reihenfolge der Größe von @Order ausgeführt, wobei der größere zuerst ausgeführt wird.
Das obige ist der detaillierte Inhalt vonSo führen Sie Springboot nach dem Start aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!