当前位置: 首页 > 知识库问答 >
问题:

Heroku数据库的URL作为Maven的JDBC URL

徐承载
2023-03-14

我在Heroku上的应用程序使用数据库URL。这很容易用Java解析为带有用户名和密码的JDBCURL。没有问题。然而,我有一个JOOQ生成器和Flyway migrator,它们有maven插件,我不知道如何将这些插件需要的JDBC URL、用户名和密码输入maven。所以目前我在应用程序启动时做这件事,这并不理想。当我的应用程序启动时,我获取数据库URL,解析它,然后进行flyway迁移和jOOQ代码生成。但我希望这种情况发生在实际构建过程中,而不是在应用程序启动期间。

基本上,我需要Heroku环境变量格式化为(postgres://user:pass@ec2-host: 1234/path-to-db),以便在maven中作为这样的属性(jdbc: postgresql://ec2-host: 1234?用户

我认为解决方案可能在于maven build helper插件,但我无法完全正确地获得regex属性规范。

谢谢

共有2个答案

安浩瀚
2023-03-14

Maven解决这个问题的方法可能有很多种,但有一种选择是在/src/main/resources路径中保留一个属性文件,使用属性Maven插件加载它(可以在jOOQ Spring示例中看到一个示例),然后使用单独的部分组成URL,例如jOOQ和Flyway:

<url>jdbc:postgresql://${db.host}:${db.port}/${db.database}</url>
<user>${db.username}</user>
<password>${db.password}</password>

Heroku:

<database_url>postgres://${db.username}:${db.password}@${db.host}:${db.port}/${db.database}</database_url>

潘翊歌
2023-03-14

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

在运行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加上插件:

<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}。

 类似资料:
  • 问题内容: 我想将Redis用作数据库,而不是缓存。根据我的(有限的)理解,Redis是一个内存数据存储。使用Redis有什么风险,如何减轻它们? 问题答案: 您可以通过多种不同方式将Redis用作权威存储: 打开 AOF (仅附加文件存储),请参阅AOF文档。这将实时记录针对您的数据集执行的所有Redis命令的日志。 使用主从复制运行Redis,请参阅复制文档。如果您的一个实例发生故障,这将使您

  • 我需要将我的Heroku应用程序指向我的AWS RDS数据库。我的RDS数据库已经启动并运行,并且拥有一个具有0.0.0.0/0访问权限的安全组。 db实例:mydb dbname:mydb user:wcronyn pass:password 我试过了: heroku配置:set database_url=postgres://wcronyn:password@mydb.xxxxxx.us-ea

  • 问题内容: 我想使用Yii2和redis作为数据库。 到目前为止,我从这里获得了Yii2的Redis ActiveRecord类。 链接1 链接2 但是,我遇到了问题。为什么该类在REDIS中添加为哈希? 除此之外,我找不到插入数据的模式。我添加了一个用户,它将在名称空间下添加一个用户,并在其下添加另一条记录,依此类推,但是主题都没有我在属性中定义的任何字段!仅包含ID。 我知道键值类型数据库和R

  • 问题内容: 我想将带有sqlite3的应用程序部署为Heroku上的数据库。但是,似乎Heroku不支持将sqlite3作为数据库的应用程序。是真的吗 无法在Heroku上部署由sqlite3支持的应用程序吗? PS:我已经使用PythonAnywhere成功部署了我的应用程序,但是现在想知道是否有使用Heroku部署它的任何可能方法。 问题答案: 由于Heroku的dynos没有可在部署之间持久

  • 令我惊讶的是,我还没有发现其他地方问过这个问题。简而言之,我正在写一个应用程序,我计划部署到云(可能使用Heroku),它将进行各种网络抓取和数据采集。它将在云中的原因是,这样我就可以将它设置为每天独立运行,并在我的计算机不开机的情况下将数据拉至其数据库,同时团队的其他成员也可以访问数据。 我曾经使用AWS的SimpleDB和DynamoDB,但是我发现SDB的存储限制很小,DDB糟糕的查询能力是

  • 问题内容: 我需要使用php创建一个具有大量数据的mysql数据库的解决方案。我的程序将有许多要求,我认为如果我使用缓存和OO数据库,我会得到很好的结果,但是我没有经验。 我认为,例如,如果我将保存在mysql中的信息缓存到redis数据库中,性能将会提高,但是我不知道这是否是个好主意,因此我希望有人来帮助我选择。 抱歉,如果我的英语不太好,我来自巴西。 问题答案: 是的,redis对此很有帮助。