有什么用
场景:监控设备布防
问题:监控设备数量偏多,需要提前布防,初始化监控设备信息,在SpringBoot中提供了CommandLineRunner接口,只需实现接口中的Run方法就可以实现相关业务需求。
CommandLineRunner 与@PostConstruct的区别
是Java提供的注解
PostConstruct该注解被用来修饰一个非静态的void()方法。
会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。
PostConstruct注释用于需要依赖注入完成后才能执行任何初始化的方法上
在类投入使用之前,定会调用此方法
在使用spring框架时,先后执行顺序为Constructor >> @Autowired >> @PostConstruct。在类加载的时候,为当前类初始化一些数据,那么可以使用@PostConstruct注解
如何使用
在SpingBoot启动之后马上会根据@Order注解按顺序执行
可以直接使用Order注解指定在项目启动后执行顺序
@Order(1)
public class MonitorDeviceServiceImpl implements CommandLineRunner {
/**
* 初始化设备通道(登录所有设备并布防)
*/
@Override
public void run(String... args) throws Exception {
//查询所有监控设备
R<List<MonitorDevice>> r =deviceFaceGateClient.listMonitorDeivce();
List<MonitorDevice> list = new ArrayList<>();
if(r.isSuccess()){
list = r.getData();
}
//开始登录并布防
for (DeviceFaceGate deviceFaceGate : list) {
// 业务相关逻辑
}
}
注意点
使用起来还是非常简单,要注意业务使用场景,执行顺序