gpt4 book ai didi

spring - Zonky + Spring Boot + Postgres + Flyway 带用户名和密码

转载 作者:行者123 更新时间:2023-11-29 12:49:47 25 4
gpt4 key购买 nike

我们使用 Zonky 对由 Postgres 和 Flyway 支持的 Spring Boot 应用程序进行集成测试。一切都像一个魅力。
但是由于我们有特定的数据库配置,应用程序用户没有 DDL 权限。因此,对于数据库迁移,我们有一个不同的数据库用户(具有 DDL 权限),我们通过 spring.flyway.user 进行设置。不幸的是,为 flyway 设置用户名会强制 FlywayAutoConfiguration 专门为 Flyway 创建一个内联数据源。这是一个问题,因为 Zonky 在启动 Postgres 实例后,用具有正确 url/user/pass 的数据源 bean 覆盖原始数据源 bean。因此,Flyway 尝试连接不存在的数据库,但失败并返回 Connection Refused。 (请参阅存储库中的 issue)

最佳答案

由于使用专用凭证为 Flyway 创建的数据源不是 bean,因此 Zonky 对此无能为力。
一种解决方案是为 Flyway 创建一个数据源 bean,并使用 @FlywayDataSource 对其进行注释。但这意味着您还必须创建主数据源并将其设为 @Primary
在我们的例子中,我们使用了 Spring Boot 创建的数据源 bean,所以我们没有走上面的解决方案。相反,我们将以下内容添加到我们的集成测试中:

public class SpringFlywayCredentialsInitializer
implements ApplicationContextInitializer<ConfigurableApplicationContext> {

@Override
public void initialize(ConfigurableApplicationContext c) {
for (PropertySource<?> s : c.getEnvironment().getPropertySources()) {
if (s.containsProperty("spring.flyway.user")
&& s instanceof MapPropertySource) {
((MapPropertySource) s).getSource().remove("spring.flyway.user");
}
}
}
}

关于spring - Zonky + Spring Boot + Postgres + Flyway 带用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57010132/

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