springBoot在启动时执行任务如何实现?

古城微笑少年丶 2024-02-19 21:28 119阅读 0赞

在项目开发中会经常用到,在项目启动时候执行某段特定的代码,这时我们该如何实现呢?

在springBoot中提供了中简单方法:实现CommandLineRunner接口,并重写run()方法,并加上

  1. @Component(将该类加入ioc容器中)

如果同时有多个类实现了CommandLineRunner接口可以通过@order接口来指定启动的加载顺序。

代码例子如下:

  1. @Component
  2. @Order(value = 1)
  3. public class SysExceptionQuartz implements CommandLineRunner {
  4. private static Logger logger = Logger.getLogger(SysExceptionQuartz.class);
  5. @Autowired
  6. private PortalDao portalDao;
  7. @Override
  8. public void run(String... args) throws Exception {
  9. logger.info("项目启动时,查询数据库并创建新的定时任务");
  10. /*查询出所有系统的生效时间与对应的状态*/
  11. List<SysInfo> sysInfoList = portalDao.getSysInfo();
  12. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
  13. /*获取系统当前时间*/
  14. Date currentTime = new Date();
  15. if (sysInfoList.size() > 0) {
  16. for (SysInfo s : sysInfoList) {
  17. if(StringUtil.isNil(s.getSysEffectTime())){
  18. continue;
  19. }
  20. Date sysEffectTime = df.parse(s.getSysEffectTime());
  21. /*如果系统生效时间在当前时间之前直接去数据库更新状态*/
  22. if (sysEffectTime.after(currentTime)) {
  23. Date sysEffectDate = DateUtil.string2Date(s.getSysEffectTime(), DateUtil.YYYYMMDDHHMMSS);
  24. /*将时间转化为cron表达式*/
  25. String cronTimeExpress = CronUtil.getCron(sysEffectDate);
  26. Map<String,String> sysParamMap = new HashMap<>();
  27. sysParamMap.put(s.getSysCode(),s.getEnable().toString());
  28. /*移除已创建的job*/
  29. SysQuartzManager.removeJob("Job"+s.getSysCode(),"Job_Group"+s.getSysCode(),
  30. "Trigger"+s.getSysCode(),"Trigger_Group"+s.getSysCode());
  31. /*添加一个定时任务*/
  32. SysQuartzManager.addJob("Job"+s.getSysCode(),"Job_Group"+s.getSysCode(),
  33. "Trigger"+s.getSysCode(),"Trigger_Group"+s.getSysCode(),cronTimeExpress,sysParamMap);
  34. }else {
  35. if (!s.getEnable().equals("1")){
  36. s.setEnable("1");
  37. portalDao.makeSysEnable(s);
  38. }
  39. }
  40. }
  41. }
  42. }
  43. }

发表评论

表情:
评论列表 (有 0 条评论,119人围观)

还没有评论,来说两句吧...

相关阅读