Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 宗基+;弹簧靴&x2B;博士后&x2B;带有用户名和密码的Flyway_Spring_Postgresql_Spring Boot_Flyway - Fatal编程技术网

Spring 宗基+;弹簧靴&x2B;博士后&x2B;带有用户名和密码的Flyway

Spring 宗基+;弹簧靴&x2B;博士后&x2B;带有用户名和密码的Flyway,spring,postgresql,spring-boot,flyway,Spring,Postgresql,Spring Boot,Flyway,我们使用Zonky对Postgres和Flyway支持的Spring Boot应用程序进行集成测试。每件事都很有魅力。 但是,由于我们有特定的数据库配置,应用程序用户没有DDL权限。因此,对于DB迁移,我们有一个不同的DB用户(具有DDL权限),我们通过spring.flyway.user进行设置。不幸的是,为flyway设置用户名会强制FlywayAutoConfiguration创建专门用于flyway的内联数据源。这是一个问题,因为Zonky在启动Postgres实例后,会使用具有正确ur

我们使用Zonky对Postgres和Flyway支持的Spring Boot应用程序进行集成测试。每件事都很有魅力。

但是,由于我们有特定的数据库配置,应用程序用户没有DDL权限。因此,对于DB迁移,我们有一个不同的DB用户(具有DDL权限),我们通过
spring.flyway.user
进行设置。不幸的是,为flyway设置用户名会强制
FlywayAutoConfiguration
创建专门用于flyway的内联数据源。这是一个问题,因为Zonky在启动Postgres实例后,会使用具有正确url/user/pass的数据源bean覆盖原始数据源bean。因此,Flyway尝试连接不存在的数据库,但由于
连接被拒绝而失败。(请参阅存储库上的)

由于为Flyway创建的具有专用凭据的数据源不是bean,Zonky对此无能为力。
一种解决方案是为Flyway创建一个数据源bean,并使用
@FlywayDataSource
对其进行注释。但这意味着您还必须创建主数据源,并使其成为
@Primary

在我们的例子中,我们使用了SpringBoot创建的数据源bean,所以我们没有使用上面的解决方案。相反,我们在集成测试中添加了以下内容:

公共类SpringFlywayCredentialsInitializer
实现ApplicationContextInitializer{
@凌驾
公共void初始化(ConfigurableApplicationContext c){
对于(PropertySource s:c.getEnvironment().getPropertySources()){
if(s.containsProperty(“spring.flyway.user”)
&&s MapPropertySource的实例){
((MapPropertySource)s.getSource().remove(“spring.flyway.user”);
}
}
}
}