springboot内置接口类CommandLineRunner 是在项目启动后执行的线程类 使用方法跟其他线程类一样只需要实现CommandLineRunner接口并 重写run方法 SpringBoot在项目启动后会遍历所有实现CommandLineRunner的实体类并执行run方法,如果需要按照一定的顺序去执行,那么就需要在实体类上使用一个@Order注解(或者实现Order接口)来表明顺序 下面代码是实现项目启动将省市区信息加载到redis缓存中代码示例:
/**
* Created by HX on 2019/5/20.
* 项目启动加载类
*/
@Component
@Slf4j
@Order(value=1)
public class MyStartupRunner implements CommandLineRunner {
@Autowired
ProvinceCityDistrictSerivce provinceCityDistrictSerivce;
@Override
public void run(String... args) throws Exception {
provinceCityDistrictSerivce.initProvinceCityDistrictDtoList();
}
}
@Service
@Slf4j
public class ProvinceCityDistrictServiceImpl implements ProvinceCityDistrictSerivce {
@Autowired
ProvinceCityDistrictMapper provinceCityDistrictMapper;
@Autowired
RedisService redisService;
/**
* 生成平铺省市区json数据
* @return
*/
@Override
public String initProvinceCityDistrictDtoList(){
log.info(">>>>>>>>>>开始加载平铺格式省市区信息<<<<<<<<<<<");
ProvinceCityDistrict provinceCityDistrict = new ProvinceCityDistrict();
List<ProvinceCityDistrictDto> provinceCityDistrictDtos = provinceCityDistrictMapper.selectDtoList(provinceCityDistrict);
String s = JSON.toJSONString(provinceCityDistrictDtos);
log.info(">>>>>>>>>>加载省市区信息完毕共计{}条<<<<<<<<<<<",provinceCityDistrictDtos.size());
log.info(">>>>>>>>>>开始缓存省市区信息到redis<<<<<<<<<<<");
redisService.set("PROVINCE_CITY_DISCTRICT_KEY",s);
log.info(">>>>>>>>>>缓存省市区信息到redis完毕<<<<<<<<<<<");
return s;
}
}