基于spring的定时器
需求:每天凌晨一点将到期用户设置为过期
@Component
public class timer {
protected Logger LOGGER = LogManager.getLogger(this.getClass());
@Scheduled(cron="0 0 1 * * ?")
public void update(){
SQLReady sql = new SQLReady("UPDATE user SET status = '2' WHERE id in (select id from user where deadline<=(select TRUNC(SYSDATE) from dual))");
LOGGER.info(sql);
int i = Db.executeUpdate(sql);
LOGGER.info(i);
}
}
SQLReady是beetl封装了jdbc的sql操作,用mybatis项目就是定时去调用mapper中的方法就好
定时器配合项目启动执行方法实现缓存数据
@Component
public class getProvEveryday implements CommandLineRunner {
@Autowired
private ProvMapper provMapper;
private static List<String> PROVLIST=new ArrayList<>(32);//全国包含的省份id
@Override
public void run(String... strings) throws Exception {
PROVLIST=provMapper.queryProvById();
}
@Scheduled(cron = "0 0 1 * * *")
public void updateProv(){
PROVLIST=provMapper.queryProvById();
}
}
实现CommandLineRunner接口的方法会被spring在项目启动时执行
因为省份信息很少变动,此处以省份信息为例,获取省份信息不需要每次查库,项目启动是触发一次,每天一点更新一次就好,此处存在静态变量中,也可以将查出的数据放在redis等内存数据库中。