将classpath设置在一个容器中,以供战争档案

发布于 2025-01-19 05:13:24 字数 402 浏览 0 评论 0原文

我有一个使用 Tomcat 部署的 war 文件。
我有一个 Dockerfile,最后我构建了一个 kubernetes pod。

问题是,如果我的应用程序中的属性文件确实存在于路径中: /usr/local/tomcat/webapps/myapp/WEB-INF/classes/config/ 而不是路径 /usr/local/tomcat/webapps/myapp/WEB-INF/classes/,因此应用程序无法启动。

是否可以在 Tomcat 中设置类路径以指向特定文件夹?
例如,我想将类路径设置为:/usr/local/tomcat/webapps/myapp/WEB-INF/classes/config/
我不想有重复的属性文件。

I have a war file that I deployed with Tomcat.
I have a Dockerfile and at the end I build a kubernetes pod.

The problem is that if my property files from my app do exist in the path: /usr/local/tomcat/webapps/myapp/WEB-INF/classes/config/ and not in path /usr/local/tomcat/webapps/myapp/WEB-INF/classes/, so the application does not start.

Is it possible to set a classpath in Tomcat to point to a specific folder?
For example, I want to set classpath like: /usr/local/tomcat/webapps/myapp/WEB-INF/classes/config/.
I don't want to have duplicate property files.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叹沉浮 2025-01-26 05:13:24

正如此处提到的

foo.properties 应该放置在 web 应用程序的默认类路径覆盖的根目录之一中,例如 web 应用程序的 /WEB-INF/lib 和/WEB-INF/classes、服务器的 /lib 或 JDK/JRE 的 /lib。

  • 如果属性文件是特定于 Web 应用程序的,最好将其放置在 /WEB-INF/classes 中。
  • 如果您正在 IDE 中开发标准 WAR 项目,请将其放入 src 文件夹(项目的源文件夹)中。
  • 如果您使用的是 Maven 项目,请将其放入 /main/resources 文件夹中。

您也可以将其放在默认类路径之外的某个位置,并将其路径添加到应用程序服务器的类路径中。
例如,在 Tomcat 中,您可以将其配置为 Tomcat/conf/catalina.propertiesshared.loader 属性。

示例

FROM tomcat:8.5-jre8
 
# $CATALINA_HOME is defined in tomcat image
ADD target/my-webapp*.war $CATALINA_HOME/webapps/my-webapp.war
 
# Application config
RUN mkdir $CATALINA_HOME/app_conf/
ADD src/main/config/test.properties $CATALINA_HOME/app_conf/
 
# Modify property 'shared.loader' in catalina.properties
RUN sed -i -e 's/^shared.loader=$/shared.loader="${catalina.base} \/ app_conf"/' $CATALINA_HOME/conf/catalina.properties

As mentioned here:

foo.properties is supposed to be placed in one of the roots which are covered by the default classpath of a webapp, e.g. webapp's /WEB-INF/lib and /WEB-INF/classes, server's /lib, or JDK/JRE's /lib.

  • If the properties file is webapp-specific, best is to place it in /WEB-INF/classes.
  • If you're developing a standard WAR project in an IDE, drop it in src folder (the project's source folder).
  • If you're using a Maven project, drop it in /main/resources folder.

You can alternatively also put it somewhere outside the default classpath and add its path to the classpath of the appserver.
In for example Tomcat you can configure it as shared.loader property of Tomcat/conf/catalina.properties.

Example:

FROM tomcat:8.5-jre8
 
# $CATALINA_HOME is defined in tomcat image
ADD target/my-webapp*.war $CATALINA_HOME/webapps/my-webapp.war
 
# Application config
RUN mkdir $CATALINA_HOME/app_conf/
ADD src/main/config/test.properties $CATALINA_HOME/app_conf/
 
# Modify property 'shared.loader' in catalina.properties
RUN sed -i -e 's/^shared.loader=$/shared.loader="${catalina.base} \/ app_conf"/' $CATALINA_HOME/conf/catalina.properties
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文