文档章节

TOMCAT 启动完成后Spring 执行某个类的方法——多线程启动tomcat,spring装配

小手冰凉丶
 小手冰凉丶
发布于 2016/12/12 09:46
字数 508
阅读 75
收藏 1

如下的3种方法都是在Tomcat启动过程中执行的,这样会影响Tomcat的启动时间,从而造成Tomcat不能启动成功: 
1.配置一个Servlet默认自动启动。 
2.配置一个Listener来启动 
3.实现spring的InitializingBean接口 

要想不影响Tomcat的启动,便联想到了异步调用 。即无非就是新创建了一个线程来单独执行,这样Tomcat执行到相应的操作就可以直接继续下去了,不会处于等待的状态,避免了启动超时。基于这样的思想,可以有两种方法来完成:

 

方法一:使用如上三种方式中的任何一种来在启动Tomcat的过程中执行相应的方法,然后在执行的过程中使用另一个线程来执行:比如说将要执行的方法所在的类继承HttpServlet并在web.xml中配置,然后在该Servlet的init中去调用想要执行的方法时(假设这个方法名叫start()),启动另一个线程来执行,具体代码如下。

 

在servlet 初始化方法中启动要执行的start()方法线程:

    @Override
    public void init() throws ServletException {
          FutureTask<String> task = new FutureTask<String>(new Callable<String>(){   
              
               @Override  
               public String call() throws Exception {   
            
                   start();
                   
            return "Collection Completed";   
               }   
                   
            });  
          new Thread(task).start();   

    }

 

start()方法:  

 

 private void start() {
          QualityTestUtil  qualityTestUtil=SpringUtil.getBean("QualityTestUtil");
           System.out.println("spring 装配了");
           qualityTestUtil.test();
    }

 

spring工具类获取spring上下文:

public class SpringUtil implements ApplicationContextAware {

         private static ApplicationContext applicationContext; // Spring应用上下文环境

         /*

          * 实现了ApplicationContextAware 接口,必须实现该方法;

          *通过传递applicationContext参数初始化成员变量applicationContext

          */

         public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
             System.out.println("===================setApplicationContext");
             SpringUtil.applicationContext = applicationContext;
         }



         public static ApplicationContext getApplicationContext() {
                return applicationContext;
         }


          @SuppressWarnings("unchecked")
          public static <T> T getBean(String name) throws BeansException {
                     return (T) applicationContext.getBean(name);
           }

}


tomcat 中配置serlvet:

  <servlet>
    <description></description>
    <display-name>ServletUtil</display-name>
    <servlet-name>ServletUtil</servlet-name>
    <servlet-class>com.htjf.util.ServletUtil</servlet-class>
    <load-on-startup>3</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletUtil</servlet-name>
    <url-pattern>/ServletUtil</url-pattern>
  </servlet-mapping>

那么 你的类将被spring 装配 并且启动start方法  但是不影响tomcat启动

本文转载自:

共有 人打赏支持
小手冰凉丶
粉丝 3
博文 60
码字总数 17244
作品 0
合肥
程序员
Spring-boot+Dubbo应用启停源码分析

背景介绍 Dubbo Spring Boot 工程致力于简化 Dubbo RPC 框架在Spring Boot应用场景的开发。同时也整合了 Spring Boot 特性: 自动装配 (比如: 注解驱动, 自动装配等). Production-Ready (比...

ralf0131
05/29
0
0
学习SpringMVC——从HelloWorld开始

前言:   时隔十二年,中国女排最终过关斩将,用3:1的成绩证明了自己的实力,霸气夺冠,为中国赢得了一枚意义非常的金牌。这是一次全民的狂欢,一场视听盛宴,带给我们不仅是熠熠生辉的金牌...

qq58edf1d989a2d
06/26
0
0
史上最简单的 Spring MVC 教程(四)

1 前言 在前面的三篇博客中,咱们已经初步搭建起了 Spring MVC 框架,并依次介绍了 Spring MVC 框架的处理器映射(HandlerMapping)和控制器(Controller),但咱们也说了,在 Spring 框架体...

qq_35246620
2017/01/26
0
0
快速学会用SpringMVC搭建最小系统(超详细)

前言 做 Java Web 开发的你,一定听说过SpringMVC的大名,作为现在运用最广泛的Java框架,它到目前为止依然保持着强大的活力和广泛的用户群。 本文介绍如何用eclipse一步一步搭建SpringMVC的...

花的鱼
06/29
0
0
基于 Spring Boot 2.0 构建一个 RESTful WebService

REST 全称是 Representational State Transfer,中文意思是“表述性状态转移”。RESTful 是关于 Web 的现有特征和使用方式的一些准则和约束。 基于 Spring MVC 的 RestController,我们可以方...

摆码王子
04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6 取整除法

python3.6 中取整除法运算逻辑如下: d 非零,那么商 q 满足这样的关系: a = qd + r ,且0 ≤ r n1=7//3#7 = 3*2 +1n2=-6.1//3#-7 = 3*(-3)+2'{},{}'.format(n1,n2) 从运行结果可以...

colinux
30分钟前
3
0
阶段总结——用虚拟机搭建一个高可用负载均衡集群架构

[toc] linux基本知识已经介绍完,现有一个业务需要操作,通过对这个项目的操作,可以复习、总结、巩固之前的知识点; ** 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,...

feng-01
33分钟前
0
0
mysql 设置utf8字符集 (CentOS)

1.查看数据库及mysql应用目前使用的编码方式 (1)链接mysql 客户端 (2)执行:status 结果: 2.修改mysql 应用的字符编码(server characterset ) (1)打开配置文件:vim /etc/mysql/my...

qimh
33分钟前
0
0
windows无法格式化u盘解决方法

1。点开始-运行-输入cmd-format f: /fs: fat32 (这里f:是指U盘所在盘符) 这个格式化会很慢 请耐心等待

大灰狼wow
45分钟前
0
0
MySql 8.0连接失败

原来,MySql 8.0.11 换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)。而客户端工具Navicat Premium12 中找不到新的身份验证插件(caching_s...

放飞E梦想O
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部