实际应用中,我们会有在项目服务启动完成以后去加载一些数据或做一些事情(比如缓存)这样的需求。
为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。很简单,只需要一个类就可以,无需其他配置。
Spring Boot应用程序在启动后,会遍历CommandLineRunner接口的实例并运行它们的run方法。也可以利用@Order注解(或者实现Order接口)来规定所有CommandLineRunner实例的运行顺序。@Order 注解的执行优先级是按value值从小到大顺序
package com.tengjie.base.common.web;
import com.tengjie.base.modules.province.entity.Province;
import com.tengjie.base.modules.province.service.ProvinceService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
@Order(value=2)
public class AreaData implements CommandLineRunner {
/**
* 日志
*/
private static final Logger logger= LoggerFactory.getLogger(AreaData.class);
@Autowired
private ProvinceService provinceService;
public static List<Map<String, Object>> areaListMap = new ArrayList<>();
@Override
public void run(String... args) throws Exception {
logger.info("***************开始加载省数据***************");
Province province = Province.newInstance();
areaListMap = provinceService.findListMap(province);
logger.info("***************结束加载省数据***************");
}
}