1. 程式人生 > >web項目啟動執行方法

web項目啟動執行方法

ets 創建 web web項目 contex web服務器 sce 執行 ring

  近期在項目中需要將用戶在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,然後再去執行自己的方法。我的方法主要是為了將人員信息緩存下來。

web項目啟動執行方法