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);
                    }
                }
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值