SpringBoot 初始化基础数据一启动就加载到Redis
我们之前的做法都是经常查询基础,其实这些数据没有经常操作增改删等的话,我们可以查询一次就好然后放到redis变好。这时就有人有疑问了,那如果喔改动了,岂不是用不到了新的了。如果是这样的话你设置一个时效性。比如你设置时效性为每天12点或者一周、一个月等等清除redis,根据你自己需求而定,然后重新加载新的到redis中。首先你载入redis做个判断,避免重复加载。你先判断能不能拿到从redis中,如
·
我们之前的做法都是经常查询基础,其实这些数据没有经常操作增改删等的话,我们可以查询一次就好然后放到redis变好。这时就有人有疑问了,那如果喔改动了,岂不是用不到了新的了。如果是这样的话你设置一个时效性。比如你设置时效性为每天12点或者一周、一个月等等清除redis,根据你自己需求而定,然后重新加载新的到redis中。首先你载入redis做个判断,避免重复加载。你先判断能不能拿到从redis中,如果不能拿到则查询放入redis中,否则不需要查询数据库。有的人说为啥启动就要加载初始化数据呢,我登陆后加载不好么,之前喔也是这么做,后面喔才发现这个会业务代码,更快,这些不经常操作的数据,我们一开始加载的话,就不会我们操作业务去操作,从而也可以说提高了点性能吧为了业务代码。话不多说上代码,目前提供两种方法。
一、启动类实现 CommandLineRunner
@SpringBootApplication
public class Zkt5gBuAdminApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Zkt5gBuAdminApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
initData()
}
@Autowired
private XXXXService XXXService;
private void initData(){
XXXService.xxxfuncation();
}
}
二、用注解形式进行加载 @PostConstruct ,先创建一个类 RedisInitDataRunner
@Configuration
public class RedisInitDataRunner {
@Autowired
private xxxService xxxService;
/**
* 创建线程池,默认10个线程
*/
public static final ExecutorService pool = Executors.newFixedThreadPool(10);
/**
* 初始化数据
*/
@PostConstruct
public void initData() {
pool.execute(new Runnable() {
@Override
public void run() {
xxxService.xxxfuncation();
}
});
}
}
写的不是很好有不好的地方欢迎指出。谢谢,也希望能够帮得到需要帮助的人
更多推荐
所有评论(0)