web项目启动执行方法

  近期在项目中需要将用户在web启动时就查询出来,当作缓存使用。

一、首先需要实现 ServletContextListener 接口

 1 public class UserCacheUtils implements ServletContextListener {
 2 
 3     /**
 4      * web服务器启动时执行
 5      */
 6     @Override
 7     public void contextInitialized(ServletContextEvent sce) {
 8       System.out.println("启动");
 9     }
10 
11     
12 
13     /**
14      * 消亡时执行
15      */
16     @Override
17     public void contextDestroyed(ServletContextEvent sce) {
18         System.out.println("关闭");
19     }
20 
21 }

  ServletContextListener 接口中有2个方法 contextInitialized 方法在web容器创建时执行,而 contextDestroyed 是在容器销毁时执行,所以我们可以将我们需要执行的代码加入到上述2个方法中。

 

二、Web.xml 配置监听

  我们要想执行上述代码就必须在Web.xml中配置监听去监听这个类。

1       <!-- 配置用户缓存监听路径 -->
2     <listener> 
3           <listener-class>com.dffk.audsys.common.util.UserCacheUtils</listener-class> 
4     </listener>

  这里要配置自己的类。

 

三、Bean 注入

  在这个类中,我们是不可以通过 @Autowired 获取到需要注入的 Bean ,这里我们需要使用 spring 进行对象注入。

 1 public class UserCacheUtils implements ServletContextListener {
 2     
 3     //获取spring注入的bean对象  
 4     private WebApplicationContext springContext;  
 5     
 6     @Autowired
 7     private SysUserMapper sysUserMapper;
 8 
 9     /**
10      * 存放所有人员信息,key为username
11      */
12     public static Map<String, SysUser> userMap;
13     /**
14      * web服务器启动时执行
15      */
16     @Override
17     public void contextInitialized(ServletContextEvent sce) {
18         springContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());  
19           if(springContext != null){  
20               sysUserMapper = (SysUserMapper)springContext.getBean("sysUserMapper");  
21           }else{  
22            System.out.println("获取应用程序上下文失败!");  
23            return;  
24           }  
25         System.out.println("启动");
26         getUsers();
27     }
28     
29     /**
30      * 缓存人员信息
31      */
32     public void getUsers () {
33         List<SysUser> users = sysUserMapper.findAllUsers();
34         users.stream().forEach((e) -> {
35             userMap.put(e.getUserName(), e);
36         });
37         userMap.keySet().stream().forEach(System.out :: println);
38     }
39     
40 
41     /**
42      * 消亡时执行
43      */
44     @Override
45     public void contextDestroyed(ServletContextEvent sce) {
46         System.out.println("关闭");
47     }
48 
49 }

  以上在 contextInitialized 方法中首先去初始化 需要注入的 bean,然后再去执行自己的方法。我的方法主要是为了将人员信息缓存下来。

 

posted on 2018-06-09 11:54  Herrt灬凌夜  阅读(1104)  评论(0编辑  收藏  举报

导航