springBoot在启动时执行任务如何实现?
在项目开发中会经常用到,在项目启动时候执行某段特定的代码,这时我们该如何实现呢?
在springBoot中提供了中简单方法:实现CommandLineRunner接口,并重写run()方法,并加上
@Component(将该类加入ioc容器中)
如果同时有多个类实现了CommandLineRunner接口可以通过@order接口来指定启动的加载顺序。
代码例子如下:
@Component
@Order(value = 1)
public class SysExceptionQuartz implements CommandLineRunner {
private static Logger logger = Logger.getLogger(SysExceptionQuartz.class);
@Autowired
private PortalDao portalDao;
@Override
public void run(String... args) throws Exception {
logger.info("项目启动时,查询数据库并创建新的定时任务");
/*查询出所有系统的生效时间与对应的状态*/
List<SysInfo> sysInfoList = portalDao.getSysInfo();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
/*获取系统当前时间*/
Date currentTime = new Date();
if (sysInfoList.size() > 0) {
for (SysInfo s : sysInfoList) {
if(StringUtil.isNil(s.getSysEffectTime())){
continue;
}
Date sysEffectTime = df.parse(s.getSysEffectTime());
/*如果系统生效时间在当前时间之前直接去数据库更新状态*/
if (sysEffectTime.after(currentTime)) {
Date sysEffectDate = DateUtil.string2Date(s.getSysEffectTime(), DateUtil.YYYYMMDDHHMMSS);
/*将时间转化为cron表达式*/
String cronTimeExpress = CronUtil.getCron(sysEffectDate);
Map<String,String> sysParamMap = new HashMap<>();
sysParamMap.put(s.getSysCode(),s.getEnable().toString());
/*移除已创建的job*/
SysQuartzManager.removeJob("Job"+s.getSysCode(),"Job_Group"+s.getSysCode(),
"Trigger"+s.getSysCode(),"Trigger_Group"+s.getSysCode());
/*添加一个定时任务*/
SysQuartzManager.addJob("Job"+s.getSysCode(),"Job_Group"+s.getSysCode(),
"Trigger"+s.getSysCode(),"Trigger_Group"+s.getSysCode(),cronTimeExpress,sysParamMap);
}else {
if (!s.getEnable().equals("1")){
s.setEnable("1");
portalDao.makeSysEnable(s);
}
}
}
}
}
}
还没有评论,来说两句吧...