- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Apache Tomcat中,我看到了一些引用路径$CATALINA_HOME/shared/lib
的帖子。
下载Tomcat时,在Tomcat主文件夹中看不到嵌套的shared
文件夹。
我确实看到了$CATALINA_HOME/lib
路径,嵌套在Tomcat主文件夹中的lib
文件夹。我了解这是不应在Tomcat中的“上下文”(Web应用程序)之间复制的JAR文件的适当位置。 JDBC drivers是此类的重要示例。
问题是Tomcat在$CATALINA_HOME/lib
文件夹中填充了许多JAR供自己使用。因此,为使整洁和易于管理起见,最好有另一个文件夹,除了Tomcat自己的JAR以外,除了我们添加的JAR以外,什么都没有。所以我可以理解对$CATALINA_HOME/shared/lib
之类的东西的需求。
问题是:
(a)我没有找到shared
文件夹,
(b)我找不到有关此文件夹的任何文档。
<这是shared/lib
的真实功能,是否应该在Tomcat主文件夹中嵌套创建这对文件夹?
cc $CATALINA_HOME/shared/lib
是未记录的功能,也许只是将来可能会消失的黑客吗?
我要的是Tomcat 9。但是Tomcat 8仍然很常用,因此其他人也可以从中得到答案。
最佳答案
警告:我不是Tomcat专家,这个答案仅仅是我对事情如何运作的了解。我可能是错的。请纠正我。
tl; dr
是的,这是一个真实的功能。
您可以在最想要收集要在Tomcat中的一个或多个Web应用程序之间共享的JAR文件的任何位置创建一个文件夹。
通过编辑catalina.properties
文件来为Tomcat使用该文件夹,以将值分配给名为shared.loader
的属性。
共享类加载器
您指的是Tomcat的共享加载程序功能。
如您所述,某些具有JDBC驱动程序的JAR不应在Tomcat实例中的多个Web应用程序之间分别复制。该主题已在堆栈溢出上进行discussed many times。
此类JAR应该由共享的Java Class Loader而不是每个Web应用程序类的加载器加载。
几台装载机
如上图所示,Tomcat可以使用许多不同的类加载器,如explained in the doc。Bootstrap
和System
类装入器与此处的讨论无关。
Tomcat自己的需求使用Server
类加载器。这可能包括代表您在数据库中查找与Realm相关的用户。在这种情况下,Tomcat需要将JDBC驱动程序连接到您选择的数据库。
从Webapp1
和Webapp2
的关系图中可以看出,每个Web应用程序还都具有一个类加载器。这样可以使每个网络应用保持独立,从而防止它们相互踩踏。例如,每个Web应用程序可能使用不同版本的日志记录框架。
JDBC驱动程序的窍门是它们在JVM范围内的单例DriveManager
对象中共享注册表。不幸的是,JDBC团队的这种设计选择与使用各种类加载器的应用服务器(例如Tomcat)的需求相冲突。在问题Why must the JDBC driver be put in TOMCAT_HOME/lib folder?和many others中对此进行了讨论。
因此,最好在Tomcat的类加载器中为每种JDBC驱动程序共享一个JAR文件。这确实意味着您的所有Web应用程序都必须使用每种JDBC驱动程序(Postgres,H2,Oracle等)的相同版本。
如果您尚未在Tomcat中启用Realm用户查找功能,则Tomcat可能没有使用它自己的数据库。因此,您可以将JDBC驱动程序放在Shared
类加载器中,以在一个或多个Web应用程序中使用。
如果您已在Tomcat中启用了需要数据库的功能,则将该JDBC JAR文件放在Common
类加载器中,以便在Tomcat内部和一个或多个Web应用程序中使用。
诀窍是,默认情况下,Tomcat仅专门定义Common
类加载器。 Common
类加载器与Server
和Shared
类加载器一样具有双重职责。要为Server
和/或Shared
激活单独的类加载器,请编辑catalina.properties
文件。查找server.loader
和shared.loader
属性。catalina.properties
文件
关于文档,请参见手册中的此主页:Class Loader How-To。在Wiki页面中也提到了†。
在$CATALINA_HOME/conf/catalina.properties
文件中的注释中简要讨论了此问题。根据其Apache许可2条款摘录:
#
# List of comma-separated paths defining the contents of the "shared"
# classloader. Prefixes should be used to define what is the repository type.
# Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
# the "common" loader will be used as Catalina's "shared" loader.
# Examples:
# "foo": Add this folder as a class repository
# "foo/*.jar": Add all the JARs of the specified folder as class
# repositories
# "foo/bar.jar": Add bar.jar as a class repository
# Please note that for single jars, e.g. bar.jar, you need the URL form
# starting with file:.
#
# Note: Values may be enclosed in double quotes ("...") in case either the
# ${catalina.base} path or the ${catalina.home} path contains a comma.
# Because double quotes are used for quoting, the double quote character
# may not appear in a path.
shared.loader=
shared.loader
属性的默认值为空白。正如评论所解释的那样,Tomcat将回退到使用其“公共加载器”,该加载器从Catalina Home文件夹中的
lib
文件夹以及Catalina Base文件夹中的
lib
文件夹(某些人将其定义为文件夹位于Tomcat文件夹之外,以便于管理)。
shared/lib
文件夹只是一种惯例。
$CATALINA_HOME/shared/lib
之类的东西:
shared
和
lib
文件夹(具有适当的文件系统特权)。
$CATALINA_HOME/conf/catalina.properties
以将
shared.loader=
替换为:
shared.loader="${catalina.home}/shared/lib","${catalina.home}/shared/lib/*.jar"
lib
,为JAR文件指定了
lib/*.jar
。
catalina.base
定义为该外部文件夹。在这种情况下,您可能也希望将共享的JAR文件也保存在这里,而不是保存在Tomcat文件夹中。因此,您可能希望在此处创建您的
shared/lib
。引用那些引用注释中的示例:
shared
和
lib
文件夹(具有适当的文件系统特权)。
$CATALINA_HOME/conf/catalina.properties
以将
shared.loader=
替换为:
shared.loader="${catalina.base}/shared/lib","${catalina.base}/shared/lib/*.jar"
catalina.base
而不是
catalina.home
。
/shared/lib
文件夹。
.base
和
.home
:
shared.loader="${catalina.base}/shared/lib","${catalina.base}/shared/lib/*.jar","${catalina.home}/shared/lib","${catalina.home}/shared/lib/*.jar"
<dependency>
元素中,您需要将
<scope>
设置为值
provided
,以避免将JDBC驱动程序的副本捆绑在Web应用程序的
WAR文件中。请参见
this Answer。
shared/lib
文件夹,然后编辑
catalina.properties
文件以为名为
shared.loader
的属性定义值的相同技术。
关于tomcat - $ CATALINA_HOME/shared/lib是Tomcat中的真实功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58159342/
我已经安装了 Tomcat7,为 JAVA_HOME 和 CATALINA_HOME 设置了系统环境变量。但是,当我尝试从命令提示符运行启动时,出现以下错误。CATALINA_HOME 环境变量未正确
在安装Tomcat的时候,很多论坛都说需要设置CATALINA_HOME变量,指向Tomcat的父目录。我正在通过 eclipse 运行 web 项目,它在存在和不存在此环境变量设置的情况下运行。 我
我的服务器出现了一个奇怪的问题。我正在尝试构建 OpenGTS,所以我正在使用 ant all 现在在构建它时会出现一个错误,显示为 optjars: tomcat.home: BUILD FAILE
我最近一直在更新一些文档(我们从 Apache Tomcat 7 迁移到 8)并注意到对 TOMCAT_HOME 的引用。比如创建一个环境变量TOMCAT_HOME。如果我是正确的,TOMCAT_HO
我想在属性占位符的位置使用环境变量,但我不明白: 我尝试过这种方式: 但我收到此错误 org.springframework.beans.factory.BeanInitializationExce
我使用以下方法安装了 tomcat7: sudo apt-get install tomcat7 tomcat7-admin 在使用“ps aux | grep catalina”检查 $CATALI
在Apache Tomcat中,我看到了一些引用路径$CATALINA_HOME/shared/lib的帖子。 下载Tomcat时,在Tomcat主文件夹中看不到嵌套的shared文件夹。 我确实看到
我必须在 Amazon EC2 上的 Tomcat7 的 $CATALINA_HOME/lib 中复制 Connnector/J JAR。如何在 Amazon EC2 的 Amazon Linux 上
我正在弄乱 Tomcat 服务器,我认为发生了一些奇怪的事情。我从 apache 网站下载了 Tomcat 7(不是 RPM,而是 tar.gz)。据我所知,应该设置 CATALINA_HOME 和
我在 log4j 中有这一行: log4j.appender.FILE.File=${catalina.home}/logs/debug.log 当我从 IntelliJ 运行项目时完美运行。 但是当
我在 log4j 中有这一行: log4j.appender.FILE.File=${catalina.home}/logs/debug.log 当我从 IntelliJ 运行项目时完美运行。 但是当
我已经设置了JAVA_HOME、PATH环境变量。没有别的了 我知道我还需要设置 CATALINA_HOME 但是,Tomcat EE 在没有 CATALINA_HOME 的情况下也能正常工作 为什么
我正在阅读《Tomcat:权威指南》以了解如何从同一安装中部署多个 tomcat 实例。他们描述了您需要如何分离出特定于实例的文件夹,从而使核心 CATALINA_HOME 内容保持干净;这种分离也为
我有一个与 openshift online 相关的问题,我正在使用 Tomcat7 cartridge、Mysql5.5 和 Ant Cartridge 0.1。我正在尝试将 OpenGTS 项目部
我使用 cargo-maven2-plugin 将 war 文件部署到正在运行的远程 tomcat 容器。现在我需要将文件复制到 $CATALINA_HOME/myfolder。我使用 ant-run
出于某种原因,我无法让 tomcat 8 在 netbeans 上运行……它在 localhost:8080 上运行得很好。但不会在 netbeans 上工作。我正在运行 ubuntu 16.04。
我正在尝试运行一个启动脚本,但我收到一个错误,指出 CATALINA_HOME 包含一个冒号,我看到它包含一个冒号,但那是 tomcat 的路径。 其他问题我看到了examples设置包含冒号的 CA
我需要这样的东西: "param name="File"value="${CATALINA_HOME}/logs/log4j.log" 我看到了很多类似的问题,但没有有效的解决方案。 最佳答案 对于
我在同一台服务器 (Linux) 上运行了多个 tomcat 6 实例,它按预期工作。我试图找出关于设置 CATALINA_HOME 和 CATALINA_BASE 变量的标准做法。 在我的 tomc
我有一个开发系统 (linux-Liferay6-tomcat6-Eclipse Helios),我在 SVN 中进行了版本控制。当我为新开发人员推出它相当于全新安装时,tomcat 服务器的路径是错
我是一名优秀的程序员,十分优秀!