Heroku数据库的URL作为Maven的JDBC URL
我在Heroku上的应用程序使用数据库URL。这很容易用Java解析为带有用户名和密码的JDBCURL。没有问题。然而,我有一个JOOQ生成器和Flyway migrator,它们有maven插件,我不知道如何将这些插件需要的JDBC URL、用户名和密码输入maven。所以目前我在应用程序启动时做这件事,这并不理想。当我的应用程序启动时,我获取数据库URL,解析它,然后进行flyway迁移和jOOQ代码生成。但我希望这种情况发生在实际构建过程中,而不是在应用程序启动期间 基本上我需要Heroku环境变量的格式如下(postgres://user:pass@ec2主机:1234/path-to-db)可以在maven中作为如下属性进行访问(jdbc:postgresql://ec2-host:1234?user=user&password=pass) 我认为解决方案可能在于maven build helper插件,但我无法完全正确地获得regex属性规范Heroku数据库的URL作为Maven的JDBC URL,maven,heroku,flyway,jooq,Maven,Heroku,Flyway,Jooq,我在Heroku上的应用程序使用数据库URL。这很容易用Java解析为带有用户名和密码的JDBCURL。没有问题。然而,我有一个JOOQ生成器和Flyway migrator,它们有maven插件,我不知道如何将这些插件需要的JDBC URL、用户名和密码输入maven。所以目前我在应用程序启动时做这件事,这并不理想。当我的应用程序启动时,我获取数据库URL,解析它,然后进行flyway迁移和jOOQ代码生成。但我希望这种情况发生在实际构建过程中,而不是在应用程序启动期间 基本上我需要Herok
感谢使用Maven可能有很多方法可以解决这个问题,但是一个选择是在
/src/main/resources
路径中保留一个属性文件,使用()加载它,然后使用单独的部分组成URL,例如jOOQ和Flyway:
jdbc:postgresql://${db.host}:${db.port}/${db.database}
${db.username}
${db.password}
希罗库:
postgres://${db.username}:${db.password}@${db.host}:${db.port}/${db.database}
多亏了heroku的支持,我解决了这个问题。Lukas和Axel您可能希望为使用heroku的任何用户记录此文档,希望在其构建中运行您的工具(vs代码启动),并且不希望手动维护不同的环境变量
在运行flyway迁移或jOOQ代码生成之前,我们将使用GMavin Plus插件运行一些代码,将数据库URL环境变量解析为属性
首先,您需要添加Groovy作为依赖项:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.3.9</version>
<scope>compile</scope>
</dependency>
org.codehaus.groovy
groovy all
2.3.9
编译
然后是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>
org.codehaus.gmavenplus
gmavenplus插件
1.2
初始化
执行
现在,您可以在flyway、jOOQ或任何其他配置中使用${database.jdbcUrl}、${database.username}和${database.password}。作为记录,对于flyway,您应该能够按原样传递url。无需拆分用户名和密码。@AxelFontaine我仍然认为heroku风格的URL”postgres://user:pass@ec2主机:1234/数据库路径“必须解析为类似于Flyway”jdbc:p的路径ostgresql://ec2-host:1234?user=user&password=pass”“说得好。你说得对。实际上,我必须在maven for flyway和jOOQ中将数据库URL解析为URL、用户和密码。