一、简单介绍
SpringBoot天然集成定时任务,在使用时只需要在启动类上添加注解,然后在实现类上添加@Component便可使用,基本上没有什么难度。
二、代码实现
启动类代码实现
package com.atguigu.staservice; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @ComponentScan(basePackages = {"com.atguigu"}) @EnableDiscoveryClient @EnableFeignClients @MapperScan("com.atguigu.staservice.mapper") @EnableScheduling public class StaApplication { public static void main(String[] args) { SpringApplication.run(StaApplication.class, args); } }
定时任务类
package com.atguigu.staservice.schedule; import com.atguigu.staservice.service.StatisticsDailyService; import com.atguigu.staservice.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; @Component public class ScheduledTask { @Autowired private StatisticsDailyService staService; // 0/5 * * * * ?表示每隔5秒执行一次这个方法 @Scheduled(cron = "0/5 * * * * ?") public void task1() { System.out.println("**************task1执行了.."); } //在每天凌晨1点,把前一天数据进行数据查询添加 @Scheduled(cron = "0 0 1 * * ?") public void task2() { staService.registerCount(DateUtil.formatDate(DateUtil.addDays(new Date(), -1))); } }
日期工具类
package com.atguigu.staservice.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * 日期操作工具类 * * @author qy * @since 1.0 */ public class DateUtil { private static final String dateFormat = "yyyy-MM-dd"; /** * 格式化日期 * * @param date * @return */ public static String formatDate(Date date) { SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); return sdf.format(date); } /** * 在日期date上增加amount天 。 * * @param date 处理的日期,非null * @param amount 要加的天数,可能为负数 */ public static Date addDays(Date date, int amount) { Calendar now =Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE,now.get(Calendar.DATE)+amount); return now.getTime(); } public static void main(String[] args) { System.out.println(DateUtil.formatDate(new Date())); System.out.println(DateUtil.formatDate(DateUtil.addDays(new Date(), -1))); } }