如何再程序启动时初始化数据活执行其它业务
Posted TGB-Earnest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何再程序启动时初始化数据活执行其它业务相关的知识,希望对你有一定的参考价值。
方式一
@Component
public class PostConstructInit
/**
* 如何再程序启动时初始化数据活执行其它业务
*
* @PostConstruct 用来修饰一个非静态的void()方法,当bean创建完成的时候,会仅且执行一次
* 作用:初始化数据
* 例如:加载数据库中的数据字典 缓存 到redis中
*/
@PostConstruct
public void init()
System.out.println("PostConstruct 进行......");
方式二
@Component
public class InitializingBeanInit implements InitializingBean
@Override
public void afterPropertiesSet() throws Exception
System.out.println("实现InitializingBean ------>");
方式三
@Component
public class CommandLineInit implements CommandLineRunner
@Override
public void run(String... args) throws Exception
System.out.println("实现CommandLineRunner - ---- >进行");
例子
@PostConstruct
private void initDicInfosourceData()
List<CrmDictionary> list = crmDictionaryMapper.getAllDict();
Set keys;
if (list.size()>0)
// 删除缓存数据
keys = redisTemplate.keys(RedisKeyUtil.getDictionaryHashKey("*"));
redisTemplate.delete(keys);
Map<String, List<CrmDictionary>> listMap = list.stream().collect(Collectors.groupingBy(CrmDictionary::getType));
String type;
Map<String, String> map = new HashMap<>();
for (Map.Entry<String, List<CrmDictionary>> entry : listMap.entrySet())
type = entry.getKey();
map.clear();
entry.getValue().stream().forEach(e ->
map.put( e.getKey(), e.getValue());
map.put(e.getValue(), e.getKey());
);
redisTemplate.opsForHash().putAll(RedisKeyUtil.getDictionaryHashKey(type), map);
else
log.warn("=================crm_dictionary字典数据初始化时为空===================");
// 删除缓存数据
keys = redisTemplate.keys(RedisKeyUtil.getDictionaryListKey("*"));
redisTemplate.delete(keys);
以上是关于如何再程序启动时初始化数据活执行其它业务的主要内容,如果未能解决你的问题,请参考以下文章
Spring框架 ? 项目启动时执行特定处理及ApplicationListener源码分析