Spring Boot:项目启动时如何执行特定方法

1. @PostConstruct

应该也是最简单的方式

直接在方式上面注入,但是会影响服务提供,比如这个方法要执行五分钟 这五分钟之内是无法提供服务的,这个方法是在服务初始化后之前运行, 所以 此方法运行不结束,服务就无法初始化, 在这过程路也无法提供服务

@PostConstruct
public void pingStart(){
System.out.println(" ping start:");
getPingip();
System.out.println(" ping end: ");
}

2. 使用ApplicationListener

是通过监听接口方式启动,服务已经初始化过,不影响 服务启动,并且启动之后可以正常提供服务

@Component
public class ApplicationStartQuartzJobListener implements ApplicationListener<ContextRefreshedEvent>{

@Autowired
private QuartzManager quartzManager;

/**
* 初始启动quartz
*/
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
try {
quartzManager.start();
System.out.println("任务已经启动...");
} catch (Exception e) {
e.printStackTrace();
}
}

3. CommandLineRunner

也是监听接口方式,启动服务,执行方式时仍然提供服务,服务初始化之后,执行方法

@Component
public class StartPingService implements CommandLineRunner{

@Autowired
Ping ping;

@Override
public void run(String... args) throws Exception {
// TODO Auto-generated method stub
ping.pingStart();
}

}

4. 指定启动方法执行的顺序

这两种方式的实现都很简单,直接实现了相应的接口就可以了。记得在类上加@Component注解。

如果想要指定启动方法执行的顺序,可以通过实现org.springframework.core.Ordered接口或者使用org.springframework.core.annotation.Order注解来实现。

1.Ordered接口:

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationRunner implements ApplicationRunner,Ordered{
@Override
public int getOrder(){
return 1;//通过设置这里的数字来知道指定顺序
}

@Override
public void run(ApplicationArguments var1) throws Exception{
System.out.println("MyApplicationRunner1!");
}
}
1234567891011121314151617

2.Order注解实现方式:

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Component
@Order(value = 1)
public class MyApplicationRunner implements ApplicationRunner{

@Override
public void run(ApplicationArguments var1) throws Exception{
System.out.println("MyApplicationRunner1!");
}
}

用例, 类, 写作, 顺序