我有一个用例,我需要支持多个git后端。我发现可以使用复合存储库,但经过一些测试后我意识到,如果一个存储库不存在于git后端,那么对configserver的请求将抛出一个异常"RepositoryNotFound"
如果我可以选择对configserver的请求是否会失败,或者为特定的git后端返回空,以保持对其他git后端的响应,那将是令人惊讶的。
我尝试实现一个继承自SearchPathCompositeEnvironmentRepository
的新存储库,该存储库捕获异常并忽略它。
类似:
@Slf4j
public class ResilientCompositeEnvironmentRepository extends SearchPathCompositeEnvironmentRepository
{
public ResilientCompositeEnvironmentRepository(List<EnvironmentRepository> environmentRepositories)
{
super(environmentRepositories);
}
@Override
public Environment findOne(String application, String profile, String label, boolean includeOrigin)
{
Environment env = new Environment(application, new String[] {profile}, label, null, null);
for (EnvironmentRepository repo : environmentRepositories)
{
try
{
env.addAll(repo.findOne(application, profile, label, includeOrigin).getPropertySources());
}
catch (Exception e)
{
log.warn("Could not find repo", e);
}
}
return env;
}
}
但是问题是,在EnvironmentRepositoryConfiguration中创建的SearchPathCompositeEnvironmentRepository
bean是一个Primary bean,我不能轻松地覆盖它。
我发现在那里。是最新版本的failOnError标志。我将更新我的春云版本。