Heroku DATABASE_URL 作为 Maven 的 JDBC Url

2024-04-04

我在 Heroku 上的应用程序使用 DATABASE_URL。使用 Java 将其解析为带有用户名和密码的 JDBC URL 很简单。那里没有问题。但是,我有一个带有 Maven 插件的 JOOQ 生成器和 Flyway 迁移器,但我不知道如何将这些插件所需的 JDBC URL、用户名和密码获取到 Maven 中。所以目前我在应用程序启动时执行此操作,这并不理想。当我的应用程序启动时,我获取 DATABASE_URL,解析它,然后进行 Flyway 迁移和 jOOQ 代码生成。但我希望这种情况发生在实际的构建过程中,而不是在应用程序启动期间。

基本上我需要格式类似于 (postgres://user:pass@ec2-host:1234/path-to-db) 的 Heroku 环境变量,以便在 Maven 中作为这样的属性进行访问 (jdbc:postgresql://ec2-host :1234?用户=用户&密码=密码)。

我认为解决方案可能在于 Maven 构建帮助程序插件,但我无法完全正确地获得正则表达式属性规范。

Thanks


感谢heroku的支持,我已经解决了这个问题。 Lukas 和 Axel,您可能希望为任何使用 heroku 的用户记录这一点,希望在其构建中运行您的工具(与代码启动),并且不想手动维护不同的环境变量。

在运行 Flyway 迁移或 jOOQ 代码生成之前,我们将使用 GMavin Plus 插件运行一些代码,将 DATABASE_URL 环境变量解析为属性。

首先,您需要添加 Groovy 作为依赖项:

<dependency>
  <groupId>org.codehaus.groovy</groupId>
  <artifactId>groovy-all</artifactId>
  <version>2.3.9</version>
  <scope>compile</scope>
</dependency>

然后是GMaven plus插件:

<plugin>
  <groupId>org.codehaus.gmavenplus</groupId>
  <artifactId>gmavenplus-plugin</artifactId>
  <version>1.2</version>
  <executions>
    <execution>
      <phase>initialize</phase>
      <goals>
        <goal>execute</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <scripts>
      <script><![CDATA[
        URI dbUri = new URI(System.getenv("DATABASE_URL"));

        String username = dbUri.getUserInfo().split(":")[0];
        String password = dbUri.getUserInfo().split(":")[1];
        int port = dbUri.getPort();

        String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ":" + port + dbUri.getPath();

        project.properties['database.jdbcUrl']=dbUrl
        project.properties['database.username']=username
        project.properties['database.password']=password
        ]]></script>
      </scripts>
    </configuration>
</plugin>

现在您可以在 Flyway、jOOQ 或任何其他配置中使用 ${database.jdbcUrl}、${database.username} 和 ${database.password}。

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

Heroku DATABASE_URL 作为 Maven 的 JDBC Url 的相关文章

随机推荐

  • 如何访问项目中的本地文件

    我想向我的应用程序添加一些静态文件 图像 二进制文件等 我已将它们放在名为的文件夹下Resources并将其添加到我的 XCode 项目中 接下来 我将这些文件添加到Copy Bundle Resources in the Build Ph
  • App Store 二进制文件被拒绝 - 与您的应用关联的卖家和公司名称不反映该名称

    我最近向 iTunes Connect 上传了一份新申请以进行审批 它的版本是1 0 今天 二进制文件被拒绝 解析中心提到了以下内容 与您的应用程序关联的卖家和公司名称不反映该名称 根据 Apple 开发者计划许可协议第 1 2 节的要求
  • Boost Property_Tree迭代器,如何处理它们?

    抱歉 我之前问过关于同一主题的问题 但我的问题涉及那里描述的另一个方面 如何迭代提升 https stackoverflow com questions 4586768 how to iterate a boost property tre
  • 强制小程序加载到同一个 JVM 实例中?

    我接管了一个旧 Web 应用程序的维护工作 该应用程序使用嵌入在同一网页中的多个小程序 这曾经工作得很好 但自从引入了下一代 Java 插件 1 6 0 10 后 不保证各个小程序能够加载到同一个 JVM 实例中 如果它们加载在不同的 JV
  • 如何安全、正确地创建 Windows 剪贴板的备份?

    我正在尝试创建 Windows 剪贴板的备份 基本上我正在做的是使用EnumClipboardFormats 获取当前剪贴板上存在的所有格式 然后对于每种格式 我调用GetClipboardData format 备份数据的一部分显然涉及复
  • 为什么 Scala 标准库中 @specialized 的东西这么少?

    我已经搜索过使用 specialized在Scala 2 8 1标准库的源代码中 看起来只有少数特征和类使用此注释 Function0 Function1 Function2 Tuple1 Tuple2 Product1 Product2
  • WPF MediaElement 视频播放撕裂

    我正在尝试使用 WPF 中的 MediaElement 控件来播放视频 它在 Vista 中运行得很好 但是当我在 XP 机器上运行它时 我的显示屏出现撕裂现象 看起来好像没有使用垂直同步 只是在绘制过程中更新屏幕 有人知道如何解决这个问题
  • 如何让 VS Code 识别 ES7 绑定运算符

    VS Code 无法识别开箱即用的 ES7 绑定语法 相反 它显示为语法错误 代码中突出显示的错误示例 https i stack imgur com gXXrX png ts Declaration or statement expect
  • Android信号分析+一些过滤器

    由于世界杯是主要的体育赛事 而呜呜祖拉是世界上最烦人的声音 我想通过阅读这篇新文章来彻底消除它们 http www popsci com diy article 2010 06 simple software can filter out
  • ContextCompat.checkSelfPermission 的用例是什么?

    目前我有以下方法来检查运行时权限AppCompatActivity对于棉花糖 if Build VERSION SDK INT gt Build VERSION CODES LOLLIPOP MR1 boolean hasPermissio
  • Rails 3:如何在控制器中获取图像路径?

    要获取控制器中的图像路径 我使用以下方法 class AssetsController lt ApplicationController def download image file name path Rails root join p
  • Z3 SMT 求解器中的常数相等

    我正在使用 Microsoft 的 Z3 SMT 求解器 并且我正在尝试定义自定义类型的常量 默认情况下 这些常量似乎并不不平等 假设您有以下程序 declare sort S 0 declare const x S declare con
  • 带有淡入淡出效果的完整背景图像

    crossfade gt div animation imageAnimation 30s linear infinite 0s backface visibility hidden background size cover backgr
  • 旁加载静态数据

    在 ParDo 中处理数据时 我需要使用存储在 Google Cloud Storage 上的 JSON 架构 我想这可能是侧面加载 我读了他们称之为文档的页面 https beam apache org releases pydoc 2
  • 如何将 [[nodiscard]] 属性应用于 lambda?

    我想防止人们在不处理返回值的情况下调用 lambda Clang 4 0 拒绝我尝试过的一切 使用 std c 1z 进行编译 auto x nodiscard return 1 error nodiscard attribute cann
  • 处理segfault信号SIGSEGV需要使用siginfo_t确定segfault的原因

    我正在为 pthread 库制作一个包装器 它允许每个线程拥有自己的一组非共享内存 现在 如果任何线程尝试读取另一个线程的数据 程序就会出现段错误 这很好 我可以用叹息者抓住它并打电话pthread exit 并继续执行该程序 但并不是所有
  • Bootstrap 下拉列表 z-index 显示在模式窗口页脚下

    我在引导程序方面遇到了一些样式问题 我有一个包含下拉菜单的小模态窗口 但是我似乎无法让下拉菜单显示在窗口的页脚上 我已经使用了下拉列表的 zindex 确保它高于 Windows 但没有运气 谁能建议我应该改变什么 The html div
  • 如何创建浮动操作按钮转变成单张材料

    我正在尝试查看设计库中是否存在任何内置动画来创建浮动操作按钮 并将其转换为单个材料表 如材料设计图像中所示 https material design storage googleapis com publish material v 4
  • Android:访问硬件相机预览帧数据而不绘制它们

    根据 Java SDK 端的 android 相机文档 必须为相机预览帧提供一个要绘制的 可见且活动的 表面 以便访问帧数据 我已经链接了我在这里遇到的一些内容 我是新人 所以最多有 2 个超链接 但是在最终在这里发布我自己的问题之前 我查
  • Heroku DATABASE_URL 作为 Maven 的 JDBC Url

    我在 Heroku 上的应用程序使用 DATABASE URL 使用 Java 将其解析为带有用户名和密码的 JDBC URL 很简单 那里没有问题 但是 我有一个带有 Maven 插件的 JOOQ 生成器和 Flyway 迁移器 但我不知