Spring boot自动任务

Spring boot配置自动任务改变数据状态

因为项目需要,需要设置自动任务来监测数据库工单信息,然后改变其状态;

  • 若当前时间在周期结束时间之前,则不改变
  • 若当前时间在周期结束时间之后,则修改状态,变为“超期未执行”

以下是配置步骤(有参考别的文章):

  1. .在启动类中加入开启定时任务的注解(@EnableScheduling):
@MapperScan("com.verymro.eam.dao")
@SpringBootApplication(scanBasePackages = {"com.verymro.eam.controller","com.verymro.eam.service","com.verymro.eam.flow"})
@EnableScheduling
@EnableSwagger2
public class EamWebApplication{


    public static void main(String[] args) {
        SpringApplication.run(EamWebApplication.class, args);
    }

    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        paginationInterceptor.setDialectType("mysql");
        return paginationInterceptor;
    }

}

2.相应Service中的方法要注释(@Scheduled):

/**
     * 定时(间隔一分钟)任务(超期未执行)
     * @param
     * @return
     */
    @Override
    @Scheduled(fixedDelay  = 60000)
    public void updateState() throws ParseException {
        //当前时间
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = sdf.format(date.getTime());
        Date a=sdf.parse(time);

        System.out.println("now>>>"+a);
        PreMain p = new PreMain();
        p.setState("1");
        List<PreMain> preMains = preMainMapper.selectPreList(p);
        for (PreMain pp:preMains) {
            //周期结束时间
            Calendar instance = Calendar.getInstance();
            instance.setTime(sdf.parse(pp.getCycleEndTime()));
            String time1=sdf.format(instance.getTime());
            Date b=sdf.parse(time1);
            if(b.before(a)) {
                pp.setState("3");
                preMainMapper.updatePre(pp);
                System.out.println(pp.getWorkOrderCode()+":超期未执行!");
            }
        }
    }

补充:
1)首先使用一个@Scheduled注解开启定时任务;

2)fixedRate表示任务执行之间的时间间隔,具体指两次任务的开始时间间隔,有可能出现第二次任务开始而第一次任务并未结束的情况;

3)fixedDelay表示任务执行之间的时间间隔,具体指本次任务结束到下次任务开始之间的时间间隔;

4)initialDelay表示首次任务启动的延迟时间;

5)所有时间的单位都是毫秒。

上面这是一个基本用法,除了这几个基本属性外,@Scheduled注解也支持cron表达式,可以非常丰富的描述定时任务的时间,cron表达式格式详情以及其他自动任务配置方法在以下链接:
SpringBoot中定时任务的实现

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值