提要:由于项目采用的是mongodb存储数据,redis作为中间的缓存,需要启动时加载数据库的一些数据。

目录

一、实现

1.项目启动时自动加载数据

2、缓存定时更新


一、实现

1.项目启动时自动加载数据

通过添加@postConstrust注解实现,被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。@PostConstruct在构造函数之后执行,init()方法之前执行,@ProDestroy方法在destory方法执行之后执行,在Servlet被彻底卸载之前。执行顺序流程如下:

实现代码

public void initData(){
        pool.execute(new Runnable() {
            @Override
            public void run() {
                log.info("启动加载数据");
                userService.loadAllUser();
                recordService.loadAllRecords();

            }
        });
    }

启动时自动加载最近一个星期的所有浏览记录和活跃的数据

2、缓存定时更新

1、在定时更新的方法上添加@Scheduled注解,但是要注意要使用@Scheduled注解,首先需要在启动类添加@EnableScheduling,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测@Scheduled注解,执行计划任务,

cron=”0 0 20 * * ?“,代表每天晚上8点自动更新。一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。 
按顺序依次为 

秒(0~59) 
分钟(0~59) 
小时(0~23) 
天(月)(0~31,但是你需要考虑你月的天数) 
月(0~11) 
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 
年份(1970-2099)(可省略)

  @Scheduled(cron = "0 0 20 * * ?")
    public void loadAllRecords(){
        //项目启动时自动加载,每天20:00更新一次
        String key="lastestRecords";
        if(RedisUtil.exists(key)) RedisUtil.del(key);
        List<RecordInfo> records=getAllRecords();
        String records_json= ObjectMapperUtil.toJSON(records);
        RedisUtil.set(key,records_json);
    }

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐