在 Heroku 环境中使用 ResourceUtils.getFile 从类路径读取文件

2024-03-02

我正在 Heroku 中运行 Spring Boot 应用程序,使用 Maven 来管理构建生命周期。

在应用程序的初始化阶段,我想读取打包到 JAR 文件中的文件。

为了设法获取文件的内容,我正在使用 Spring 实用程序类ResourceUtils,我使用特殊前缀表示文件的路径classpath:.

我正在使用的代码如下所示:

String pathToMyFile = "classpath:com/myapp/myFile.test"
List<String> fileLines = Files.readLines(ResourceUtils.getFile(pathToMyFile), IOConstants.DEFAULT_CHARSET_TYPE);

当我在本地计算机中执行应用程序时,此代码按预期工作。

但是当我将应用程序推送到 Heroku 时,出现以下错误:

Caused by: java.io.FileNotFoundException: class path resource [com/myapp/myFile.test] 
cannot be resolved to absolute file path because it does not reside in the 
file system: jar:file:/app/target/myapp.jar!/com/myapp/myFile.test 

我已经运行了heroku run bash我已经检查过该文件是否位于它应该在的位置(在罐子内)。

而且,根据错误跟踪,Spring找到了该文件,因为它转换了路径classpath:com/myapp/myFile.test to jar:file:/app/target/myapp.jar!/com/myapp/myFile.test


我怀疑当您在本地运行时,它会从分解的 JAR 文件(即作为文件系统上的常规文件)中获取类路径上的文件。

在 Heroku 上,它位于 JAR 文件中,这意味着它不是常规文件,必须作为输入流读取,可能如下所示:

ClassLoader cl = this.getClass().getClassLoader();
InputStream inputStream = cl.getResourceAsStream(pathToMyFile);

那么你可能会使用缓冲读取器 http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html读取行。但也许ResourceUtils有更好的方法。

您可以通过运行与您的系统中相同的命令来在本地重现该问题Profile.

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

在 Heroku 环境中使用 ResourceUtils.getFile 从类路径读取文件 的相关文章

随机推荐

  • 使用 lambda 编写枚举函数

    我收到了这个练习 写一个函数enumerate它接受一个列表并返回一个列表 元组包含 index item 对于列表中的每个项目 我的问题是我无法将索引和值插入一个或多个for循环 这是我设法制作的代码 a a b c a b c inde
  • WELD-001409 类型 [EagerBeansRepository] ​​的依赖关系不明确

    我正在尝试将 JSF 应用程序迁移到 CDI 我实施了以下更改 添加一个空的 beans xml 文件到 WEB INF 将 ManagedBean 更改为 Named 将我拥有的所有范围更改为 CDI 范围 会话 视图 请求 将所有 EJ
  • 在 GCD 串行队列上调度和无效 NSTimers 是否安全?

    这样做的正确方法是什么 这NSTimer文档是这样说的 特别注意事项 您必须从以下线程发送此消息 安装了计时器 如果您从其他人发送此消息 线程中 与计时器关联的输入源可能不会被删除 从其运行循环中 这可能会阻止线程退出 适当地 Since
  • git bare 存储库中的“fetch --all”不会将本地分支同步到远程分支

    我正在尝试定期同步 git bare 存储库 我的本地分支是使用 track 选项创建的 这是我的配置 没有不必要的东西 core bare true remote origin url email protected cdn cgi l
  • 发出连续的 HTTP 请求是节点中的阻塞操作吗?

    请注意 与我的问题无关的信息将被 引用 像这样 随意跳过这些 Problem 我正在使用节点代表多个客户端发出有序的 HTTP 请求 这样 客户端最初需要加载几个不同的页面才能获得所需的结果 现在只需要通过我的服务器发出一个请求 我目前使用
  • Google App Engine 使用 Python 动态生成站点地图

    我有一个网站 我想为其创建动态站点地图 我将 Google App Engine 与 Python 和 Django 结合使用 我使用 PHP 开发了另一个网站 并且由于我在 Apache 服务器的 htaccess 上编写的重写规则 可以
  • xampp 找不到我的主文件夹 --Mac os x

    我正在尝试将 XAMPP 与 NetBeans for PHP 结合使用 当我将文件移至 htdocs 文件夹时 一切正常 但是 当它们位于主文件夹中时 XAMPP 无法找到它们 以下是 XAMPP 的说明 我遵循了它 但它不起作用 Whe
  • 等待 Selenium 中的页面加载

    你怎么做Selenium http en wikipedia org wiki Selenium 28software 292 0等待页面加载 您还可以使用以下代码检查页面加载情况 IWait
  • 为给定的正则表达式创建所有可能匹配的集合

    我想知道如何找到一组与给定正则表达式匹配且匹配数量有限的所有匹配 例如 所有这些例子你都可以假设它们是从 并结束于 hello gt hell hello 1 9 0 9 0 3 gt 1 2 3 9998 9999 My cat dog
  • 在 Android 模拟器上安装 Facebook apk

    有没有人成功做到这一点 我已经尝试过这个网站上的 sdk apk 的各种组合 但没有成功 https developers facebook com docs android downloads https developers faceb
  • Zend / Apache2:多次请求 url 时出现 302 Found

    我正在编程一个REST API with Zend框架 当多次调用 url 时 例如每秒 1 个请求 1000 次 大约0 2 的案例而不是得到200 OK作为我得到的回应302 Found 所以重定向到不同的页面 这是整个服务器响应 30
  • 最近执行的 SQL 不在 V$SQL 中

    什么情况下选择查询不会出现在V SQL视图中 例如 如果我运行这个 select findme from T 然后立即运行 select from v sql where sql text like findme 在什么情况下我不会返回任何
  • 如何在WebGL中实现类似隧道的动画? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何在WebGL中实现类似隧道的动画
  • 如何将多个 csv 文件导入 MySQL 数据库

    有没有办法同时将多个csv文件导入MySQL数据库 某种批量导入 我在 Mac OSX 上运行 MAMP 服务器 我有 185 个 csv 文件需要导入到 MySQL 表中 我可以使用 phpMyAdmin 的导入选项卡单独导入它们 但这需
  • 隐藏评级栏的阴影

    定制RatingBar显示我的影子 如何隐藏这个阴影
  • jQuery 选择器

    我试图从源代码中获取这一点 即 a href img src wwv flow file mgr get file p security group id 1343380920146312332 p flow id 222 p fname
  • Postgres SQL 状态:22P02

    我需要在 Postgres 中运行以下查询 select left file date 10 as date lob name devicesegment sum conversion units numeric as units from
  • 水晶报表子报表分页符

    我是水晶报表新手 我一直在尝试解决这个子报表分页问题 我想我知道该报告的作用 但我不知道如何解决这个问题 很难解释 所以我上传了这些图片 My main report My sub report which is in the Detail
  • 在 int 上使用扩展方法

    我正在阅读有关扩展方法的内容 并尝试使用它们 看看它们是如何工作的 我尝试了这个 namespace clunk public static class oog public static int doubleMe this int x r
  • 在 Heroku 环境中使用 ResourceUtils.getFile 从类路径读取文件

    我正在 Heroku 中运行 Spring Boot 应用程序 使用 Maven 来管理构建生命周期 在应用程序的初始化阶段 我想读取打包到 JAR 文件中的文件 为了设法获取文件的内容 我正在使用 Spring 实用程序类Resource