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

        

    }

}

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

你可能感兴趣的:(spring)