zoukankan      html  css  js  c++  java
  • Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)

      最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了。

      问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行加载(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)。我个人首先想到的是在tomcat中加监听,tomcat启动时先加载监听中的方法、方法中的加载顺序也就是按照我拟定的顺序进行。

      然后我查了一些资料,发现了两种解决方案:

        1、通过tomcat的类加载起解决;

          分析:感觉没有方法2方便切不容易处理,需要改大量代码,所以只是了解了下,没有细看,可以了解博客:http://www.cnblogs.com/xing901022/p/4574961.html

        2、通过监听去处理(和我想的方向是一致的,但细看了一些资料后发现了一些通用问题):

          Tomcat服务器启动时自动加载数据到缓存,这就需要创建一个自定义的缓存监听器并实现ServletContextListener接口,并且在此自定义监听器中需要用到Spring的依赖注入功能.在web.xml文件中监听器配置如下:

    1. <listener>  
    2.         <listener-class>  
    3.             org.springframework.web.context.ContextLoaderListener  
    4.         </listener-class>  
    5. </listener>  
    6. <listener>  
    7.     <listener-class>  
    8.         com.liulei.test.listener.CacheListener  
    9.     </listener-class>  
    10. </listener>  

          上面的配置细细大意为,先配置spring监听器,启动spring,再配置一个缓存监听器,我希望他们是顺序执行的,因为在缓存监听器中需要 spring注入其他对象的实例,我期望在服务器加载缓存监听器前加载Spring的监听器,将其优先实例化。但是实际运行发现他们并不是按照配置的顺序加载的。

          对于此问题的解决方案我的个人观点就是重写一下spring的ContextLoaderListener  ,在配置文件中只加在这一个监听类就可以,在重写的方法中加入自己的(2、初始化线程池,3、加载业务代码)业务代码,然后查了一下资料也有类似的处理方案来落实了我的想法是正确的。

          举一个重写ContextLoaderListener  的例子:

    1. public class ContextLoaderListenerOverWrite extends ContextLoaderListener {  
    2.     private StartServer startServer;  
    3.     @Override  
    4.     /** 
    5.      * @description 重写ContextLoaderListener的contextInitialized方法 
    6.      */  
    7.     public void contextInitialized(ServletContextEvent event) {  
    8.         super.contextInitialized(event);  
    9.         startServer = StartServer.getInstances();
    10.         startServer.start();
    11.         /* 
    12.          如果您的系统还需要其他业务代码可以卸载此处 
    13.          */  
    14.     }  
    15. }  
    16. 这样我的问题就得到了解决,再次记录一下自己解决的思路和流程~
    Wait for the flying eagles Believe that I will succee and just stack to it_Mr.Liu
  • 相关阅读:
    齐文词根词缀---1、第一讲
    元音发音规则
    英语重读规则
    英语单词重读规则
    unicode,ansi,utf-8,unicode big endian编码的区别
    Netty中粘包和拆包的解决方案
    【转载】 DirectByteBuffer内存释放
    Netty 中ChannelOption的含义以及使用的场景Netty 中ChannelOption的含义以及使用的场景
    Connection reset原因分析和解决方案
    Netty实现Socket
  • 原文地址:https://www.cnblogs.com/liu-eagles/p/7802677.html
Copyright © 2011-2022 走看看