pull/8/head
Yin 3 months ago
parent 6d9a5088f8
commit d291a2370e

@ -19,43 +19,98 @@ import java.util.Map;
/**
* ,,
*/
/**
* ServletContextListener
* 线MyThreadMethod
* 线
*/
// 使用@WebListener注解将该类标记为一个Web监听器使其能够被Web容器识别并在对应的生命周期事件如项目启动、停止等发生时被调用
// 从而执行相应的逻辑,在这里就是进行字典初始化以及线程启动等操作。
@WebListener
public class DictionaryServletContextListener implements ServletContextListener {
// 创建一个静态的Logger对象用于记录日志信息通过LoggerFactory.getLogger方法传入当前类的Class对象来获取
// 后续可以使用这个logger在不同的生命周期方法中记录如项目启动、停止、字典表初始化等各个阶段的关键信息方便排查问题以及了解程序执行情况。
private static final Logger logger = LoggerFactory.getLogger(DictionaryServletContextListener.class);
// 声明一个MyThreadMethod类型的变量用于存储一个自定义的线程对象这个线程大概率执行一些与业务相关的后台任务具体任务由MyThreadMethod类的实现决定
// 初始化为null会在合适的时机项目启动时的上下文初始化阶段进行实例化并启动。
private MyThreadMethod myThreadMethod;
/**
* ServletContextListenerWebServlet
* 便
*
* @param sce ServletContextEventServlet
*/
@Override
public void contextDestroyed(ServletContextEvent sce) {
logger.info("----------服务器停止----------");
}
/**
* ServletContextListenerWebServlet
* 线Servlet便使
* 线便
*
* @param sce ServletContextEventServletServletSpring
*/
@Override
public void contextInitialized(ServletContextEvent sce) {
// 通过WebApplicationContextUtils工具类的getWebApplicationContext方法传入从ServletContextEvent对象中获取的Servlet上下文对象
// 获取整个Web应用的Spring应用上下文ApplicationContext后续可以基于这个上下文来获取Spring容器管理的各种Bean实例比如获取字典服务相关的Bean。
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
logger.info("----------字典表初始化开始----------");
// 从Spring应用上下文中获取名为"dictionaryService"的Bean实例并强制转换为DictionaryService类型
// DictionaryService应该是一个用于处理字典表相关业务逻辑的服务层接口通过它可以调用如查询字典表数据等方法来进行字典表初始化操作。
DictionaryService dictionaryService = (DictionaryService)appContext.getBean("dictionaryService");
// 调用dictionaryService的selectList方法传入一个默认的EntityWrapper<DictionaryEntity>对象(可能用于添加一些通用的查询条件等,具体取决于业务实现),
// 获取字典表中的所有字典实体数据返回一个List<DictionaryEntity>类型的列表列表中的每个DictionaryEntity对象代表一条字典表记录包含了如字典编码、索引等相关信息。
List<DictionaryEntity> dictionaryEntities = dictionaryService.selectList(new EntityWrapper<DictionaryEntity>());
// 创建一个HashMap对象用于存储整理后的字典表数据其结构是外层的键为字典编码String类型值为内层的一个Map<Integer, String>
// 内层的Map中键为代码索引Integer类型值为对应的索引名称String类型这样的结构方便后续根据字典编码以及索引快速查找对应的名称等信息。
Map<String, Map<Integer,String>> map = new HashMap<>();
// 遍历从字典表中查询到的所有字典实体数据列表对每条记录进行处理将其按照特定的结构整理到前面创建的map对象中。
for(DictionaryEntity d :dictionaryEntities){
// 根据当前字典实体的字典编码d.getDicCode()从map中获取对应的内层Map即代码索引和索引名称的映射关系如果获取到的是null或者为空说明还没有该字典编码对应的映射关系
// 则创建一个新的HashMap作为内层Map用于存储该字典编码下的索引和名称对应关系。
Map<Integer, String> m = map.get(d.getDicCode());
if(m ==null || m.isEmpty()){
m = new HashMap<>();
}
// 将当前字典实体的代码索引d.getCodeIndex()作为键索引名称d.getIndexName()作为值放入内层的Mapm以此构建字典编码下具体的索引和名称对应关系。
m.put(d.getCodeIndex(),d.getIndexName());
// 将整理好的内层Mapm重新放回外层的map中以字典编码d.getDicCode())作为键,完成当前字典实体数据在整体数据结构中的整理和存储。
map.put(d.getDicCode(),m);
}
// 将整理好的包含字典表数据的map对象存储到Servlet上下文的属性中属性名为"dictionaryMap"方便在整个Web应用的其他地方可以通过获取Servlet上下文属性来获取这些字典数据
// 用于诸如数据展示、业务逻辑中根据字典进行数据转换等操作。
sce.getServletContext().setAttribute("dictionaryMap", map);
logger.info("----------字典表初始化完成----------");
logger.info("----------线程执行开始----------");
// 判断myThreadMethod是否为null如果是null说明还没有实例化该线程对象
// 则创建一个MyThreadMethod类的实例用于后续启动一个自定义的线程来执行相关的后台任务具体任务由MyThreadMethod类的实现决定
if (myThreadMethod == null) {
myThreadMethod = new MyThreadMethod();
myThreadMethod.start(); // servlet 上下文初始化时启动线程myThreadMethod
// 启动前面实例化的myThreadMethod线程在Servlet上下文初始化项目启动时启动这个线程让其开始执行相应的任务
// 比如可能是定时更新字典数据、执行一些周期性的业务逻辑等操作具体取决于MyThreadMethod类中run方法的实现内容。
myThreadMethod.start();
}
logger.info("----------线程执行结束----------");
}
}

Loading…
Cancel
Save