如何在 Tomcat 8.5 中部署 Spring boot 时使用外部配置文件

2024-01-03

我的 Spring Boot 应用程序 (2.1.1.RELEASE) 作为 WAR 部署在 Debian 9 系统下的 Tomcat 8.5 服务器中。除其他外,它使用以下文件来配置应用程序:

  • myApplication.properties(Spring的主配置文件)
  • log4j2.xml

两者都在src/main/resources.

我的问题是如何配置 Tomcat 和 Spring Boot 以允许我拥有一个目录/home/oliver/conf其中包含这两个文件,以便覆盖下定义的默认值src/main/resources(然后在WEB-INF/classes在爆发的战争中)。

以下是我已采取的步骤。

首先,作为我正在处理的项目的要求,我通过编辑更改了默认的 Tomcat 基目录以指向另一个位置/etc/init.d/tomcat8 :

CATALINA_HOME=/usr/share/tomcat8
CATALINA_BASE=/home/oliver

My /home/oliver/conf包含 Tomcat 和 Spring 配置的文件夹如下所示:

- Catalina/
- context.xml
- web.xml
- server.xml
- ...
- myApplication.properties
- log4j2.xml
- otherAppConfFile.properties
- ...

因为Spring寻找application.properties默认情况下,我正在使用@PropertySource注释指定另一个文件:

@SpringBootApplication
@PropertySource({classpath: myApplication.properties})
public class MyApp extends SpringBootServletInitializer {...}

我尝试添加-Dspring.config.location=file:/home/oliver/conf/myApplication.properties to JAVA_OPTS定义于/etc/default/tomcat8,并且它可以工作(正确覆盖嵌入文件),但是例如如果我尝试添加file:/etc/oliver/conf/log4j2.xml改成前面的JVM参数,就不起作用了。

我读了一些有关 Spring“环境配置文件”的内容,但如果可能的话不想使用它们。

当我启动 Tomcat 并发出ps aux | grep tomcat命令,我看到所有 JAVA_OPTS 参数都按预期定义,而且我还看到以下内容:

-classpath :/home/oliver/conf:/usr/share/tomcat8/bin/.... -Dcatalina.base=/home/oliver -Dcatalina.home=/usr/share/tomcat8

我对 Tomcat 的类路径和 Spring 的类路径的关联方式以及我应该如何解决这个问题有点困惑。

如果我在启动时看到的类路径包括/home/oliver/conf目录中,为什么里面的文件不覆盖嵌入的属性文件(myApplication.properties、log4j2.xml ...)?是否可以看到该文件夹​​并将其添加到 Spring 的类路径中?

EDIT :

附带说明一下,下面可能有各种文件/home/oliver/conf需要考虑到这一点,例如log4j2.xml + myApplication.properties + 密钥库.jks所以我不确定我可以信赖-Dspring.config.location and -Dlogging.config完全。


我从你的问题中了解到你正在尝试做这样的事情。

-Dspring.config.location=file:/etc/oliver/conf/log4j2.xml

我认为属性 spring.config.location 是提供用于配置的属性文件的位置,而不是 log4j2.xml 。 您可以通过设置logging.config的值来设置myApplication.properties中日志文件的位置,例如

logging.config=file:/etc/oliver/conf/log4j2.xml

或者你可以尝试

-Dlogging.config=file:/etc/oliver/conf/log4j2.xml

UPDATE

这就是我在生产系统中所做的事情。创建文件 setenv.sh 并输入以下命令。

export JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=/path/to/keystore/keystore.jks -Djavax.net.ssl.trustStorePassword=changeit -Dspring.profiles.active=qa -Dspring.config.location=/path/to/config/ -Dfws_log=/path/to/logfile/location -Xms512m -Xmx1024m -Dsecret.key=somesecretkey"

您可以在此文件中添加任意数量的键值映射,所有这些映射都会在 Tomcat 启动时加载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Tomcat 8.5 中部署 Spring boot 时使用外部配置文件 的相关文章

  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 如何在spring mvc框架中运行后台进程

    我有一个网络应用程序 使用 spring mvc 框架 它使得以下内容 用户将文件上传到服务器 立即进入成功页面 使用该文件运行后台进程 那么 我如何使用 spring mvc 框架来做到这一点呢 先感谢您 使用异步标记方法 你在这里有例子
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • 如何解决 openapi-generator-maven-plugin 使用已弃用的类?

    我尝试将 openapi generator maven plugin 与 Spring Boot 2 4 3 一起使用 根据互联网上的一些示例 按照 openapi yaml 中制定的规范生成代码 但没有示例提供包含所需的完整依赖项 该插
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • Git/gitolite:设置 gitolite 后移动存储库

    我正处于让 Git 和 Gitolite 工作的最后阶段 这是目前的情况 Gitolite 管理下的存储库没有工作副本 因此 您要做的就是创建另一个包含工作副本的存储库 提交数据并将它们推送到 gitolite 管理的存储库 最简单的方法是
  • 当我使用自定义入口点时,为什么 webpack 无法找到 React?

    我在 Webpack 中设置了一个自定义入口点 但在我的 React 代码行中收到错误 import React from react Webpack 能够构建它 但它不会拦截该路径 因为 Chrome 给了我这个控制台错误 未捕获的类型错
  • 服务人员强制更新新资产

    我一直在阅读html5rocks Service Worker 简介 http www html5rocks com en tutorials service worker introduction 文章并创建了一个基本的服务工作线程来缓存
  • 为什么 Firefox 中的背景过滤器不起作用?

    我使用背景过滤器 模糊 30px 但 Firefox 不支持此属性 moz 背景过滤器 模糊 60px 也不起作用 默认不支持https caniuse com css backdrop filter https caniuse com c
  • 如何在 vstest 控制台上获取自定义输出?

    我在 Visual Studio 2012 中编写了一些数据驱动的测试 当我通过在 Visual Studio 2012 命令提示符中运行以下命令从控制台运行测试时vstest console exe myTestSuite dll 我收到
  • 什么是 Querydsl 'Q'

    我看到了 Querydsl 的示例 但我不明白其中的 QEmployee 是什么 QEmployee employee QEmployee employee QEmployee e new QEmployee e query from em
  • 如何在 Intellij 中启用 CSS 编辑

    我刚刚切换到 IntelliJ IDEA 因为我认为它非常适合开发 JavaFX 应用程序 我一定做错了什么 因为当我编辑 CSS 文件时 没有代码完成 当我尝试创建新的 CSS 文件时 没有 CSS 文件选项 我正在使用 IntelliJ
  • 如何在 Rails 中将文本转换为 unicode?

    在我的数据库中 我有以下条目 id name info 1 John Smith 正如您所知 信息栏显示错误 但它实际上是韩语 在 Chrome 中 当我将浏览器编码从 UTF 8 切换为韩语 我认为是 euc kr 时 我实际上设法这样查
  • 如何安装jar库?

    我已经下载了 ANTLR Java 运行时库 这是一个 jar 文件 它包含 org antlr runtime 我应该把它放在哪里以便 Java 编译器可以找到它 我需要提取它吗 如果相关的话 我正在使用 NetBeans 目前 假设您可
  • msbuild xmlupdate 删除 web.config 中的节点

    如何使用 MSBuild 社区任务删除 web config 中的节点 我可以使用 XmlUpdate 任务更新节点 但无法删除节点 有任何想法吗 XmlUpdate 任务可以做到这一点 我正在使用 2010 年 11 月 30 日的夜间版
  • 将纬度和经度转换为 3D 空间中的点

    我需要将纬度和经度值转换为 3 维空间中的点 我已经尝试了大约 2 个小时 但没有得到正确的结果 The 等长方形坐标来自openflights org http openflights org data html 我尝试了几种组合cos
  • JIRA api 的 .NET 包装器?

    我正在开发 JIRA 实现 需要使用 API 有谁知道 JIRA SOAP API 的现有 NET 包装器吗 在 Visual Studio NET 项目中 右键单击项目引用并选择 添加服务引用 输入 JIRA 的 WSDL 描述符的 UR
  • 如何捕获datePicker关闭事件

    我正在使用日期选择器 它工作正常 我的网页很少需要使用开始日期和结束日期进行一些计算 我希望能够在日期选择器关闭时进行计算 我在用 有人有什么建议吗 您正在寻找onClose method 参考API文档here http api jque
  • 公共 IP 地址是否可以用作 Google OAuth 重定向 URI?

    我正在尝试设置一个需要用户的 Google Latitude 信息的网络服务 因此我使用 Google OAuth 来获取用户授权内容 但是 当尝试在 Google API 控制台中为 Web 应用程序客户端 ID 设置重定向 URI 时
  • 在 int main() 中使用类函数

    我在从主程序调用函数时遇到问题 这些功能必须在我的班级中 如何从 int main 访问它们 include
  • 使用 Delphi 7 进行开发时,准备好使用 Delphi 2009 及更高版本了吗?

    我正在 Delphi 7 中开发一个 Word 插件 但很快我会将其升级到 Delphi 2010 如您所知 因为 2009 版本 Delphi 引入了新的字符串类型Unicode字符串等于关键字string 另一方面 根据这个线程 htt
  • 使用 AJAX 调用 WordPress 简码

    我想使用切换按钮运行短代码 如果开关为 ON 我会调用一个短代码 如果它为 OFF 我会调用另一个 作为测试 我尝试通过 AJAX 单击单个链接来调用短代码 它给出了以下内容 文件 page recherche php a href CLI
  • gitlab CI期间激活conda环境

    My gitlab ci yml文件看起来像这样 anomalydetector image continuumio miniconda 4 7 10 stage build tags docker script conda env cre
  • 是否可以在 Xcode 7 自动化 UI 测试中存根 HTTP 请求?

    我一直在尝试在 Xcode 7 自动化 UI 测试中拦截和存根 模拟 HTTP 请求 使用诸如OHHTTP存根 https github com AliSoftware OHHTTPStubs 没有运气 下面是我如何尝试在 UI 测试文件的
  • 如何在 Tomcat 8.5 中部署 Spring boot 时使用外部配置文件

    我的 Spring Boot 应用程序 2 1 1 RELEASE 作为 WAR 部署在 Debian 9 系统下的 Tomcat 8 5 服务器中 除其他外 它使用以下文件来配置应用程序 myApplication properties