zoukankan      html  css  js  c++  java
  • Spring:启动项目时加载数据库数据(总结)

    在项目中需要启动程序时,要将数据库的用户信息表加载到内存中,找到一下几种方式。

    1、实现ApplicationListener接口,重写onApplicationEvent方法,可以在项目启动的时候执行该方法。

    @Component("userInit")
    public class UserInit implements ApplicationListener   {
        public static Map<String,User> map=new HashMap<String, User>();
        
        public static Map<String, User> getMap() {
            return map;
        }
    
    
        public static void setMap(Map<String, User> map) {
            UserInit.map = map;
        }
    
        private  HibernateTemplate hibernateTemplate;
        
        
        
    
        public HibernateTemplate getHibernateTemplate() {
            return hibernateTemplate;
        }
        
        @Resource
        public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
            this.hibernateTemplate = hibernateTemplate;
        }
    
    
        
    
    
    
        @Override
        public void onApplicationEvent(ApplicationEvent arg0) {
            System.out.println("-------------------加载");
            List<User> list=hibernateTemplate.find("from User");
            for(User s:list){
                map.put(s.getUserName()+s.getPassword(), s);
            }
            System.out.println(map);
        }
    }

    该种方法实现比较简单,但是可能会在项目中多次执行,因为并没有规定监听。

    如果有个类studentEvent继承了ApplicationEvent,那么要针对这个类进行监听 

     public void onApplicationEvent(ApplicationEvent _event) {  
            if (!(_event instanceof StudentEvent)) {  
                return;  
            }  
    ...
    }

    2、实现InitializingBean接口,重写方法afterPropertiesSet()方法,可以在项目启动时进行加载

    @Component("userInit")
    public class UserInit implements InitializingBean   {
        public static Map<String,User> map=new HashMap<String, User>();
        
        public static Map<String, User> getMap() {
            return map;
        }
    
    
        public static void setMap(Map<String, User> map) {
            UserInit.map = map;
        }
    
        private  HibernateTemplate hibernateTemplate;
        
        
        
    
        public HibernateTemplate getHibernateTemplate() {
            return hibernateTemplate;
        }
        
        @Resource
        public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
            this.hibernateTemplate = hibernateTemplate;
        }
    
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("-------------------加载");
            List<User> list=hibernateTemplate.find("from User");
            for(User s:list){
                map.put(s.getUserName()+s.getPassword(), s);
            }
            System.out.println(map);
            
        }
    }

    这种方式只加载一次,比较方便

  • 相关阅读:
    RabbitMQ系列2 RabbitMQ安装与基础入门
    RabbitMQ系列1 什么是MQ
    数据结构与算法系列1之数组介绍与动态数组实现
    数据结构与算法系列3之从内存角度分析数组与链表的区别
    Dubbo学习
    Can't locate Pod/Text.pm问题分析及解决
    “画饼”陷阱论
    自述
    结构光、立体视觉、ToF三种3D传感原理
    游侠郭解是如何被无脑粉坑死的?
  • 原文地址:https://www.cnblogs.com/volare/p/3922540.html
Copyright © 2011-2022 走看看