zoukankan      html  css  js  c++  java
  • 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,然后再去执行自己的方法。我的方法主要是为了将人员信息缓存下来。

  • 相关阅读:
    解决DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE(或META-INF/DEPENDENCIES)
    为已经存在的本地项目添加git,以及从远程仓库拉取代码并切换远程分支
    android将应用中图片保存到系统相册并显示
    android选取系统相册图片后,识别图中二维码
    android 判断左右滑动,上下滑动的GestureDetector简单手势检测
    推荐个emacs的org-mode手册的地址
    JVM监控与调优
    Java 内存区域和GC机制
    贴个流媒体大牛的博客
    苹果cms测试
  • 原文地址:https://www.cnblogs.com/wuyx/p/9158986.html
Copyright © 2011-2022 走看看