gpt4 book ai didi

java - 从保管库中提取数据库 secret 以执行 Jooq 在本地主机上不起作用

转载 作者:行者123 更新时间:2023-11-30 05:47:15 24 4
gpt4 key购买 nike

我们正在使用 jooq 生成查询数据库的代码。为了让 jooq 运行,我们使用如下环境变量提供配置:

<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>${jooq.version}</version>

<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>

<configuration>
<jdbc>
<driver>org.postgresql.Driver</driver>
<url>${DB_URL}</url>
<user>${DB_USER}</user>
<password>${DB_PASSWORD}</password>
</jdbc>

<generator>
<name>org.jooq.codegen.JavaGenerator</name>

<database>
<name>org.jooq.meta.postgres.PostgresDatabase</name>
<includes>.*</includes>
<excludes />
<dateAsTimestamp>true</dateAsTimestamp>
<inputSchema>myDb</inputSchema>
</database>

<generate>
<deprecated>false</deprecated>
<instanceFields>true</instanceFields>
</generate>

<target>
<packageName>com.myapp.jooq</packageName>
<directory>target/generated-sources/jooq-postgres</directory>
</target>
</generator>
</configuration>

<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
</dependencies>
</plugin>

为了设置这些属性DB_URLDB_USERDB_PASSWORD,我们使用vault-maven-plugin在maven生命周期中,在jooq之前执行。这是我们使用的配置:

<plugin>
<groupId>com.deciphernow</groupId>
<artifactId>vault-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>pull</id>
<phase>initialize</phase>
<goals>
<goal>pull</goal>
</goals>
<configuration>
<servers>
<server>
<url>http://my.hostedvault.net:8200</url>
<token>myTokenHere</token>
<paths>
<path>
<name>secret/myApp</name>
<mappings>
<mapping>
<key>spring.datasource.username</key>
<property>DB_USER</property>
</mapping>
<mapping>
<key>spring.datasource.password</key>
<property>DB_PASSWORD</property>
</mapping>
<mapping>
<key>spring.datasource.url</key>
<property>DB_URL</property>
</mapping>
</mappings>
</path>
</paths>
</server>
</servers>
</configuration>
</execution>
</executions>
</plugin>

这工作得很好,但是当我们将插件更改为 localhost:8200 时,它总是返回 404 错误:

[ERROR] Failed to execute goal com.deciphernow:vault-maven-plugin:1.0.0:pull (pull) on project myApp: Exception thrown pulling secrets. Vault responded with HTTP status code: 404 -> [Help 1]

这只发生在 vault-maven-plugin 中使用的本地主机库。所以,这看起来像是 Maven 插件上的一个错误(我确认了我的 localhostVault 的工作属性,并且 spring-boot 可以毫无问题地从中提取)。知道如何向 Jooq 提供存储在保管库中的凭据属性吗?

最佳答案

我发现了这个问题,因此发布答案,以防它可以帮助其他遇到相同问题的人。

我在 dev 模式下运行 vault,因此当我们使用此模式时,vault 会将 /data 附加到 uri。我是这样开始跳马的:

docker run -p 8200:8200 --name='vault' --cap-add=IPC_LOCK -e 'VAULT_DEV_ROOT_TOKEN_ID=myroottoken' vault

插件vault-maven-plugin似乎可以与在服务器(生产)模式下运行的vault一起使用。因此,如果我们使用此命令启动Vault,一切都会正常:

docker container run --cap-add=IPC_LOCK -e 'VAULT_LOCAL_CONFIG={"backend": {"file": {"path": "/vault/file"}}, "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": "true", "listener": {"tcp": {"address": "0.0.0.0:8200", "tls_disable": "true"}}}' -e VAULT_ADDR=http://127.0.0.1:8200 -e VAULT_API_ADDR=http://127.0.0.1:8200 -p 8200:8200 vault server

请注意,您必须通过进入容器来打开保险库:

docker container exec -it <containerId> /bin/sh

并发出此命令:vault Operator init

关于java - 从保管库中提取数据库 secret 以执行 Jooq 在本地主机上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54632755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com