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

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

  • 相关阅读:
    java中Objenesis库简单使用
    java魔法类之ReflectionFactory介绍
    求与一个数最接近的2的N次幂
    java魔法类之Unsafe介绍
    java中如何通过程序检测线程死锁
    jQuery.fullpage自定义高度(demo详解)
    angular diretive中 compile controller link的区分及编译顺序
    div水平垂直居中的几种方法(面试问题)
    angular 双ng-repeat显示隐藏
    快速应用rem
  • 原文地址:https://www.cnblogs.com/volare/p/3922540.html
Copyright © 2011-2022 走看看