1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| package com.example.demo;
import java.util.ArrayList; import java.util.List; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.gateway.event.RefreshRoutesEvent; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionRepository; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono;
@RestController @SpringBootApplication public class DemoApplication implements RouteDefinitionRepository, ApplicationEventPublisherAware {
public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }
ApplicationEventPublisher applicationEventPublisher;
@Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { this.applicationEventPublisher = applicationEventPublisher; }
List<RouteDefinition> memery = new ArrayList<>();
private void refreshRoute() { applicationEventPublisher.publishEvent(new RefreshRoutesEvent(this)); }
@PutMapping Mono<Void> putRoute(@RequestBody Mono<RouteDefinition> o) { return o.flatMap(routeDefinition -> { memery.add(routeDefinition); refreshRoute(); return Mono.empty(); }); }
@PostMapping Mono<Void> postRoute(@RequestBody Mono<RouteDefinition> o) { return o.flatMap(routeDefinition -> { for (int i = 0; i < memery.size(); i++) { if (memery.get(i).getId().equals(routeDefinition.getId())) { memery.set(i, routeDefinition); } } refreshRoute(); return Mono.empty(); }); }
@DeleteMapping Mono<Void> deleteRoute(@RequestBody Mono<String> o) { return o.flatMap(id -> { memery.removeIf(routeDefinition -> routeDefinition.getId().equals(id)); refreshRoute(); return Mono.empty(); }); }
@GetMapping Mono<List<RouteDefinition>> getRoute(){ return Mono.just(memery); }
@Override public Flux<RouteDefinition> getRouteDefinitions() { return Flux.fromIterable(memery); }
@Override public Mono<Void> save(Mono<RouteDefinition> route) { return Mono.empty(); }
@Override public Mono<Void> delete(Mono<String> routeId) { return Mono.empty(); } }
|