1. Replace keys with scan when get routeDefinitions.

2. Fix null pointer exception when filters are null.
This commit is contained in:
lzhpo
2022-01-02 15:17:00 +08:00
committed by spencergibb
parent fb2b1c1784
commit 5b43c6579f
2 changed files with 8 additions and 3 deletions

View File

@@ -24,10 +24,12 @@ import reactor.core.publisher.Mono;
import org.springframework.cloud.gateway.support.NotFoundException;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.data.redis.core.ReactiveValueOperations;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.stereotype.Repository;
/**
* @author Dennis Menge
* @author lzhpo
*/
@Repository
public class RedisRouteDefinitionRepository implements RouteDefinitionRepository {
@@ -50,7 +52,8 @@ public class RedisRouteDefinitionRepository implements RouteDefinitionRepository
@Override
public Flux<RouteDefinition> getRouteDefinitions() {
return reactiveRedisTemplate.keys(createKey("*")).flatMap(key -> reactiveRedisTemplate.opsForValue().get(key))
return reactiveRedisTemplate.scan(ScanOptions.scanOptions().match(createKey("*")).build())
.flatMap(key -> reactiveRedisTemplate.opsForValue().get(key))
.onErrorContinue((throwable, routeDefinition) -> {
if (log.isErrorEnabled()) {
log.error("get routes from redis error cause : {}", throwable.toString(), throwable);

View File

@@ -40,6 +40,7 @@ import org.springframework.cloud.gateway.support.ConfigurationService;
import org.springframework.cloud.gateway.support.HasRouteId;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.util.CollectionUtils;
import org.springframework.web.server.ServerWebExchange;
/**
@@ -172,8 +173,9 @@ public class RouteDefinitionRouteLocator implements RouteLocator {
new ArrayList<>(this.gatewayProperties.getDefaultFilters())));
}
if (!routeDefinition.getFilters().isEmpty()) {
filters.addAll(loadGatewayFilters(routeDefinition.getId(), new ArrayList<>(routeDefinition.getFilters())));
final List<FilterDefinition> definitionFilters = routeDefinition.getFilters();
if (!CollectionUtils.isEmpty(definitionFilters)) {
filters.addAll(loadGatewayFilters(routeDefinition.getId(), definitionFilters));
}
AnnotationAwareOrderComparator.sort(filters);