最近在做一个关于健康码的小demo,需要一个每日上报信息功能,每天第一次登录的时候需要上报自己的健康信息,所以我的想法是用一个字段来标识今天用户是否上报过,如果没有就让前端显示上报页面,因此就涉及到了定时,在每天0点的时候需要把所有用户的那个字段都设为false。
其实定时也很简单,如下所示即可,只要程序启动了就可以,也不需要用任何东西去调用下面的程序。不过虽然不需要被调用,它还是需要使用注解@Component,这是为了把它塞到Spring的容器中,所有的操作都是在Spring容器中进行的。
package com.xxx.modules.scheduler;
import com.xxx.modules.service.UserService;
import com.xxx.modules.service.bo.UserBO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class UserHealthStatusUpdateTrigger {
@Autowired
UserService userService;
/**
* 遍历所有用户,将填报状态设为未填报
*/
@Scheduled(cron = "0 0 0 * * ?")
public void updateUserHealthStatus(){
List<UserBO> allUsers = userService.findAllUser();
for(UserBO userBO : allUsers){
userBO.setReportStatus(false);
userService.saveUser(userBO);
}
}
}
schedule的参数解释1
schedule的参数解释2
这两篇应该够用了,我就不去复制粘贴了,百度一下到处都是。
但是注意要想使定时起作用还需要使用@EnableScheduling在启动类中开启:
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* MainClass
*
*/
@SpringBootApplication(scanBasePackages = "com.xxx")
@EnableScheduling
public class HealthCodeApplication {
public static void main(String[] args) {
SpringApplication.run(HealthCodeApplication.class, args);
}
}