`
tooby
  • 浏览: 117281 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在Tomcat的多个WAR之间共享Spring

 
阅读更多

在tomcat内共享Spring context。

 

    <Resource auth="Container" 
       contextConfigLocation
="/com/test/application-context.xml" 
       factory
="com.test.TomcatWebApplicationContextResourceFactory" 
       name
="bean/RootApplicationContextFactory" 
       type
="org.springframework.context.ApplicationContext"/>

 

上面这段配置的意思就是,当有人通过jndi名称”bean/RootApplicationContextFactory”来查找对象时,容器就新建一个TomcatWebApplicationContextResourceFactory类实例,并调用它的getObjectInstance方法来获得资源对象。这个工厂类要是想javax.naming.spi.ObjectFactory接口。代码如下:

 

package com.test;

 

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.Name;
import javax.naming.RefAddr;
import javax.naming.Reference;
import javax.naming.spi.ObjectFactory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TomcatWebApplicationContextResourceFactory implements
        ObjectFactory {
    
private static final String PARAM = "contextConfigLocation";
        
private static final String DEFAULT = "application-context.xml";

    private static ApplicationContext context; //被共享的spring上下文

    
private void init(String confFile) {
        context 
= new ClassPathXmlApplicationContext(confFile);
    }

    public Object getObjectInstance(Object obj, 
                        Name name, Context nameCtx,
            Hashtable
<??> environment) throws Exception {
        
if (null == context) {
            
// Customize the bean properties from our attributes
            Reference ref = (Reference) obj;

                        //从xml配置文件里取得contextConfigLocation元素的值
            RefAddr addr = ref.get(PARAM); 

            if (null != addr) {
                String value 
= (String) addr.getContent();
                init(value);
            } 
else {
                init(DEFAULT);
            }
        }
        
return context;
    }
}

 

1.2 在web应用中引用上面定义的资源
修改tomcat/conf/web.xml,添加以下的内容,这样在这个tomcat下的所有的web应用就都可以访问共享的spring上下文了。

    <resource-env-ref>
        
<description>Object factory for Root applicationcontext</description>
        
<resource-env-ref-name> bean/RootApplicationContextFactory 
        
</resource-env-ref-name>
        
<resource-env-ref-type> org.springframework.context.ApplicationContext 
        
</resource-env-ref-type>
    
</resource-env-ref>

 

1.3 加入依赖的包
从第一步可以看出,tomcat容器需要访问spring的一些类,需要初始化上下文,所以要把初始化上下文时用到的类共享给tomcat。最简单的方法是把所有相关的类和jar包复制到tomcat/lib目录。还可以修改catalina.properties实现,如下:

 

shared.loader=/usr/local/jars/*.jar

 

上面的代码让tomcat载入自定目录里面所有的jar文件。

分享到:
评论

相关推荐

    spring boot项目和vue一起放在tomcat部署

    在 Tomcat 服务器中,我们可以配置单点登录,以便实现多个应用程序之间的身份验证共享。在 server.xml 文件中,我们添加了一个单点登录 valve,如下所示: ```xml &lt;!-- ...

    springboot部署到外部tomcat容器.rar

    然而,在生产环境中,我们可能需要使用外部的Tomcat服务器,以便于更灵活地管理多个应用,或者与其他已存在的服务共享同一个Tomcat实例。 要将Spring Boot应用部署到外部Tomcat,首先我们需要创建一个WAR包,而不是...

    SpringBoot整合JSP(内置Tomcat启动和外部Tomcat部署).rar

    - 资源优化:多个应用可以共享同一个Tomcat实例,节省资源。 - 灵活性:可以单独管理和扩展Tomcat服务器,如调整线程池、连接器等配置。 - 更好的性能:外部Tomcat通常有更多优化选项,适合高并发环境。 然而,缺点...

    apache-tomcat-7.0.72

    Tomcat 7.0.72 版本是Tomcat 7系列的一个稳定版本,其中包含了多个安全更新和性能优化。在使用这个版本时,开发者可以期待更好的安全性和可靠性。例如,它可能已经修复了一些已知的安全漏洞,提高了应用的健壮性,...

    apache-TOMCAT-5.5.25

    在压缩包的文件名称列表中,我们看到"apache-tomcat-5.5.25.exe",这表明提供的文件是Windows平台上的可执行安装程序,用户可以通过运行这个文件来安装Apache Tomcat 5.5.25。 在深入讨论Apache Tomcat 5.5.25的...

    tomcat中文帮助文档

    对于高可用性和负载均衡的需求,Tomcat支持集群配置,通过复制session并在多个实例间共享,以及使用负载均衡器如Apache HTTPD或Nginx来分配请求。 9. **JNDI资源** Tomcat允许通过JNDI(Java Naming and ...

    springboot-war打包部署.doc

    - 在创建Spring Boot项目时,选择打包形式为WAR,项目中的`pom.xml`文件会自动添加Tomcat依赖: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-tomcat &lt;scope&gt;provided ``` ...

    tomcat中文手册.chm

    2. 负载均衡:使用负载均衡器分配请求到多个Tomcat实例,实现高并发处理。 九、故障排查 1. 查看日志:错误信息通常在`logs/catalina.out`中。 2. 使用JMX工具:远程诊断和管理Tomcat实例。 3. 调试模式:通过设置...

    Tomcat服务器

    7. **Host**:主机,可以配置多个虚拟主机,每个主机可以包含多个Context。 8. **Engine**:引擎,管理一个或多个Host,是整个服务器的顶级组件。 **二、Tomcat的安装与配置** 1. **下载**:从Apache官方网站下载...

    新手必看-spring boot 多模块案例

    - **共享模块**:包含可被多个模块共享的实体类、工具类或公共组件。 2. **创建模块**: 在Maven或Gradle项目中,可以通过添加子模块来创建这些模块。在Maven的pom.xml中,使用`&lt;modules&gt;`标签定义子模块;在...

    Tomcat详细资料

    9. **集群和负载均衡**:Tomcat支持集群配置,通过复制会话数据在多台服务器之间共享,实现负载均衡和故障转移。 10. **与其他技术的集成**:Tomcat可以与Spring Boot、MyBatis、Hibernate等Java框架无缝集成,构建...

    web服务器tomcat

    9. **集群与负载均衡**:对于高并发需求,Tomcat支持集群配置,通过复制session数据实现session在多个服务器间的共享,实现负载均衡。 10. **集成其他服务**:Tomcat常与Spring Boot、MyBatis等框架配合使用,构建...

    tomcat web开发配置

    8. **集群配置**:对于高可用性和负载均衡,可以配置Tomcat集群,通过`cluster`元素在多个Tomcat实例之间共享session信息。 9. **虚拟主机**:通过`&lt;Host&gt;`元素,可以在同一台Tomcat服务器上托管多个独立的Web应用...

    Spring Security集成CAS客户端实例

    CAS则是一个开放源码的SSO协议服务器,允许用户通过一个认证点登录,然后在多个应用之间共享登录状态,无需再次输入凭证。CAS的核心功能包括:身份验证、单点登录、票证管理以及服务票验证。 集成Spring Security和...

    TomCat

    Apache TomCat有多个稳定版本,如7.x、8.x和9.x,每个版本都有其特定的Java兼容性和功能特性。由于其开源性质,TomCat拥有活跃的社区,不断更新和完善,提供丰富的文档和解决方案,帮助开发者解决遇到的问题。 总结...

    apache-tomcat-8.5.16.tar.gz

    1. **Tomcat架构**:Tomcat由几个关键组件构成,包括Catalina(核心Servlet容器)、Jasper(JSP引擎)、 Coyote(HTTP/HTTPS连接器)和Commons(共享库)。 2. **安装与配置**:解压tar.gz文件后,需要配置环境变量...

    red5 与 tomcat项目集成

    1. **Red5 服务器**:Red5 是一个开源的流媒体服务器,支持 RTMP(Real Time Messaging Protocol)、RTMPT、RTMPE、RTMPTE、RTMPS 协议,用于实时音频、视频传输,以及数据共享。它允许开发者创建互动的媒体应用程序...

    blazeds 服务器war包

    2. 在线协作应用:多个用户可以共享文档,实时编辑和查看更改。 3. 多人在线游戏:实现实时的游戏状态更新和玩家间的交互。 总结,Blazeds作为一个连接Flex和Java的强大工具,极大地提高了富互联网应用程序的交互性...

    基于 Spring Boot、Spring Cloud、Spring Oau-spring-boot-cloud.zip

    作为Spring Cloud的一部分,Config Server是一个集中化的配置管理工具,允许在多环境、多实例间共享配置。它支持Git存储配置,可以实现配置的版本控制和回滚。 **Spring Cloud Netflix Eureka** Eureka是服务注册与...

    apache-tomcat-7.0.65.rar

    Apache Tomcat是一款开源的Java Servlet容器,主要用于...以上是对Apache Tomcat 7.0.65的基本介绍,包括其核心组件、配置、部署、安全和性能优化等多个方面。理解并熟练掌握这些知识对于Java Web开发和运维至关重要。

Global site tag (gtag.js) - Google Analytics