Springboot中使用定时器

1、在入口类中加入@EnableScheduling注解:

@SpringBootApplication
@EnableScheduling
public class CuwiTaskApplication extends SpringBootServletInitializer {
    protected static final Logger logger = LoggerFactory.getLogger(CuwiTaskApplication.class);


    public static void main(String[] args) throws Exception {
        SpringApplication.run(CuwiTaskApplication.class, args);
        logger.info("水业大学Task");
    }
}

2、创建定时器类,类中的方法注解了@Scheduled就是一个定时器:

方式一:

@Component
public class ScheduledTasks {
    private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

    /**
     * 每分钟处理一次
     */
    @Scheduled(fixedRate = 1000 * 60 * 30)
    public void handleAchievement() {
        log.info("定时任务 处理开始");

        // 请求页码
        int pageNo = 1;
        // 处理并返回总页数
        int totalPage = handleAchievementList(pageNo);

        pageNo++;
        while ((totalPage - pageNo) >= 0) {
            // 处理
            handleAchievementList(pageNo);
            pageNo++;
        }
        log.info("定时任务 处理结束");
    }
方式二:

@Component
public class MeetingTasks {
	private static final Logger log = LoggerFactory
			.getLogger(MeetingTasks.class);
	@Autowired
	private IMeetingService meetingService;

	// 会议开始报名状态
	@Scheduled(cron = "0 40 1 * * ?")
	public void initMeetingStartSign() {
		log.info("会议开始报名 定时任务 处理开始");

		Meeting meetingPara = new Meeting();
		meetingPara.setIsVirtualDelete(0);
		meetingPara.setSignTaskType(1);// 报名定时任务类型:1开始报名,2停止报名

		List<Meeting> meetingList = meetingService.queryList(meetingPara);
		if (meetingList != null) {
			for (Meeting meeting : meetingList) {
				if (meeting.getSignStatus() != MeetingConstant.SIGN_STATUS.ACCEPT_APPLICATIONS
						.getKey()) {
					meeting.setSignStatus(MeetingConstant.SIGN_STATUS.ACCEPT_APPLICATIONS
							.getKey());
					Integer ret = meetingService.updateById(meeting);
					if (ret == 1) {
						log.info("当天开始报名的会议状态为:报名中!");
					}
				}
			}
		}
		log.info("会议开始报名 定时任务 处理结束");
	}

从上面的代码可以看出:@Scheduled有三个属性,分别是:cron expression,fixedDelay,fixedRate (cron,fixdDelay,fixedRate三个属性必须设置一个)

cron:指定的分钟,小时,月,月和日触发。

fixedDelay:在上次调用结束和下一次调用的开始之间以毫秒为单位执行注释方法。

fixedRate:在调用之间以毫秒为单位的固定周期执行带注释的方法。

注意

需要注意的几点:

1、spring@Scheduled注解  需要写在实现上;

2、 定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定一个proxytargetclass的某个值为true);

3、实现类上要有组件的注解@Component。




  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值