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);
            
        }
    }

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

  • 相关阅读:
    数据对齐
    算法面试题集——从各大博客收集
    软件工程师规划
    链栈,顺序栈,单链队列,循环队列,非循环队列的简单实现
    C,C++文件和目录操作的一些整理
    WPF使用笔记-计时器,多线程更新界面,焦点移动等
    Heap Data Structure and Heap Sort
    YUV420P像素数据编码为JPEG图片
    根据txt文件中指定的文件名进行文件分类
    MFC显示图片和写入文件
  • 原文地址:https://www.cnblogs.com/volare/p/3922540.html
Copyright © 2011-2022 走看看