// 定义当前类所在的包路径 package com.ServletContextListener; // 导入MyBatis-Plus实体包装类 import com.baomidou.mybatisplus.mapper.EntityWrapper; // 导入字典实体类 import com.entity.DictionaryEntity; // 导入字典服务接口 import com.service.DictionaryService; // 导入自定义线程方法类 import com.thread.MyThreadMethod; // 导入日志记录器接口 import org.slf4j.Logger; // 导入日志工厂类 import org.slf4j.LoggerFactory; // 导入Spring应用上下文接口 import org.springframework.context.ApplicationContext; // 导入Web应用上下文工具类 import org.springframework.web.context.support.WebApplicationContextUtils; // 导入Servlet监听器接口 import javax.servlet.ServletContextListener; // 导入Servlet上下文事件类 import javax.servlet.ServletContextEvent; // 导入Web监听器注解 import javax.servlet.annotation.WebListener; // 导入HashMap实现类 import java.util.HashMap; // 导入List集合接口 import java.util.List; // 导入Map集合接口 import java.util.Map; // 字典初始化监听器类 // 使用@WebListener注解声明为Servlet监听器 // 实现ServletContextListener接口 @WebListener public class DictionaryServletContextListener implements ServletContextListener { // 声明日志记录器 private static final Logger logger = LoggerFactory.getLogger(DictionaryServletContextListener.class); // 声明自定义线程方法对象 private MyThreadMethod myThreadMethod; // 上下文销毁方法实现 @Override public void contextDestroyed(ServletContextEvent sce) { // 记录服务器停止日志 logger.info("----------服务器停止----------"); } // 上下文初始化方法实现 @Override public void contextInitialized(ServletContextEvent sce) { // 获取Spring应用上下文 ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); // 记录字典表初始化开始日志 logger.info("----------字典表初始化开始----------"); // 从Spring容器获取字典服务实例 DictionaryService dictionaryService = (DictionaryService)appContext.getBean("dictionaryService"); // 查询所有字典数据 List dictionaryEntities = dictionaryService.selectList(new EntityWrapper()); // 创建字典映射表 Map> map = new HashMap<>(); // 遍历字典数据并构建映射关系 for(DictionaryEntity d :dictionaryEntities){ // 获取当前字典代码对应的映射表 Map m = map.get(d.getDicCode()); // 如果映射表为空则新建 if(m ==null || m.isEmpty()){ m = new HashMap<>(); } // 添加字典项到映射表 m.put(d.getCodeIndex(),d.getIndexName()); // 更新字典映射表 map.put(d.getDicCode(),m); } // 将字典映射表存入Servlet上下文 sce.getServletContext().setAttribute("dictionaryMap", map); // 记录字典表初始化完成日志 logger.info("----------字典表初始化完成----------"); // 记录线程执行开始日志 logger.info("----------线程执行开始----------"); // 初始化并启动自定义线程 if (myThreadMethod == null) { myThreadMethod = new MyThreadMethod(); myThreadMethod.start(); // 在Servlet上下文初始化时启动线程 } // 记录线程执行结束日志 logger.info("----------线程执行结束----------"); } }