작성
·
609
0
gateway에 swagger 설치해서 api 리스트를 체크하고 있습니다.
라우트 정보를 config 서버에서 관리하도록 변경해서 gateway 재시작 없이 /actuator/refresh로 라우트 정보가 갱신되는 것은 성공했습니다.
그런데 gateway에 있는 swagger에 definition 목록에서는 추가된 라우트 정보가 반영되지는 않더군요.
apidoc 라우트 빈 등록하는 부분에 @RefreshScope를 적용해봐도 그대로라서 gateway 재시작 없이 반영할 수 있는 방법이 있을까요?
@Configuration
public class OpenApiDocConfig {
@RefreshScope
@Bean
@Lazy(false)
public List<GroupedOpenApi> apis(SwaggerUiConfigParameters swaggerUiConfigParameters, RouteDefinitionLocator locator) {
List<GroupedOpenApi> groups = new ArrayList<>();
List<RouteDefinition> definitions = locator.getRouteDefinitions().log("OpenApiDocConfig").collectList().block();
Optional.ofNullable(definitions)
.map(Collection::stream)
.orElseGet(Stream::empty)
.filter(routeDefinition -> routeDefinition.getId().matches(".*-service"))
.forEach(routeDefinition -> {
String name = routeDefinition.getId();
swaggerUiConfigParameters.addGroup(name);
GroupedOpenApi.builder().pathsToMatch("/" + name + "/**").group(name).build();
});
return groups;
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
Gateway에 있는 Swagger에 Definition 목록이 갱신되지 않는 문제에 대해 여쭤봐주셨는데요. Gateway를 재시작하지 않고 추가된 라우트 정보를 반영하는 방법이 궁금하신 거죠?
현재 코드를 보면, OpenApiDocConfig 클래스에서 @RefreshScope 어노테이션이 적용되어 있는데요, 이로 인해 스프링 클라우드 컨피그 서버로부터 변동 사항을 가져옵니다. 그런데, 현재 코드에서는 갱신된 라우트 정보를 리스트에 추가하는 부분이 빠져있어서 반영되지 않는 것 같아요.
아래 코드 부분을 수정하면 갱신된 라우트 정보를 반영할 수 있을 겁니다.
...
.forEach(routeDefinition -> {
String name = routeDefinition.getId();
swaggerUiConfigParameters.addGroup(name);
GroupedOpenApi group = GroupedOpenApi.builder().pathsToMatch("/" + name + "/**").group(name).build();
groups.add(group); // 빠진 코드 추가
});
...
위와 같이 수정한 후에 다시 실행해보시고 Swagger에 Definition 목록이 잘 갱신되는지 확인해보세요.
추가적인 도움이 필요하시면 언제든지 물어보세요. 좋은 결과 있길 바래요!