最近公司要做功能迁移,原来的后台使用的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. 这样我的问题就得到了解决,再次记录一下自己解决的思路和流程~

Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)的更多相关文章

  1. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(优先初始化Spring IOC容器)

    JavaWebSpringTomcatCache  最近用到在Tomcat服务器启动时自动加载数据到缓存,这就需要创建一个自定义的缓存监听器并实现ServletContextListener接口,并且 ...

  2. eclipse部署maven web项目到tomcat服务器时,没有将lib、web.xml复制过去的解决办法

    我这几天在写项目的时候发现自己以前的项目能够访问,隔一段时间写的这个项目却不能够访问,没有发现代码的逻辑错,但是就是访问不了jsp页面,项目一发布就是出现404错误,后来发现原来是发布到tomcat上 ...

  3. ideal的maven工程启动时老是报错,提示web.xml里面的监听器找不到,但是实际又是存在的

    -X clean compile package -Dmaven.repo.local=D:\repository-pss -Dmaven.test.skip=true maven仓库地址

  4. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  5. 如何在tomcat启动时自动加载一个类

    有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  6. Tomcat启动时自动加载Servlet

    1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet ...

  7. tomcat启动时自动加载一个类 MyServletContextListener

    目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一 ...

  8. docker+tomcat 启动时非常慢原因之JRE /dev/random阻塞

    docker+tomcat 启动时非常慢,一般正常启动几十秒的,发现docker+tomcat启动竟需要几分钟,不可思议 根本原因是 SecureRandom 这个 jre 的工具类的问题.那为什么 ...

  9. tomcat启动时自动运行代码

    原文链接:http://jingpin.jikexueyuan.com/article/49660.html 作者: 一直向北 发布时间:2015-07-13 11:12:13 方法1:tomcat ...

随机推荐

  1. 【转】shell处理mysql增删改查

    这几天做一个任务,比对两个数据表中的数据,昨天用PHP写了一个版本,但考虑到有的机器没有php或者php没有编译mysql扩展,就无法使用mysql系列的函数,脚本就无效了,今天写个shell版本的, ...

  2. ➡️➡️➡️IELTS reading by Simon on Bili

    高分必备 雅思考官Simon手把手教你做阅读 p1 https://www.bilibili.com/video/av40131278?p=2 p2 https://www.bilibili.com/ ...

  3. 20200213springboot日记

    ------------恢复内容开始------------ ------------恢复内容开始------------ ------------恢复内容开始------------ 数据库管理 L ...

  4. 【JS 移动端】获取设置页面大小

    获取设置页面大小 function getMobileData() { var ismobile = false; browser = { versions: function () { var u ...

  5. 标定设备自动化-ASAP3

    欢迎关注<汽车软件技术>公众号,回复关键字获取资料. 1.ASAP3定义 下图选自INCA文档<INCA_IF_ASAM-ASAP3_EN.pdf>说明了ASAP3的用途:标定 ...

  6. Mysql 连接时的 option 含义

    官网文档: https://dev.mysql.com/doc/refman/5.7/en/mysql-real-connect.html

  7. JavaScript - 运行机制,作用域,作用域链(Scope chain)

    参考 https://www.jianshu.com/p/3b5f0cb59344 https://jingyan.baidu.com/article/4f34706e18745be386b56d46 ...

  8. UIKeyWindow的设置

    新建一个纯代码iOS项目,需要对AppDelegate文件和项目的Info.plist文件做一番配置. 第一步:将Info.plist中的下面两项的value删除掉(保留空字符串),如下图 第二步:在 ...

  9. “数据接口请求异常:error”,Layui-table使用遇到的最大一个坑

    后台返回的json格式必须和官方给的一模一样 code必须为0, code必须为0, code必须为0, code必须为0

  10. JDBC笔记一

    连接池原理 数据库连接池:1.提前创建好多个连接对象,放到缓存中(集合),客户端用时直接从缓存中获取连接 ,用完连接后一定要还回来. 目的:提高数据库访问效率.  模拟代码: package com. ...