package com.jero.config; import lombok.extern.slf4j.Slf4j; import com.jero.handler.HystrixFallbackHandler; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.web.reactive.function.server.RequestPredicates; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.RouterFunctions; import org.springframework.web.reactive.function.server.ServerResponse; import javax.annotation.Resource; import static org.springframework.web.reactive.function.server.RequestPredicates.GET; import static org.springframework.web.reactive.function.server.RouterFunctions.route; import static org.springframework.web.reactive.function.server.ServerResponse.ok; /** * @author scott * @date 2020/05/26 * 路由配置信息 */ @Slf4j @Configuration public class GatewayRoutersConfiguration { public static final long DEFAULT_TIMEOUT = 30000; public static String SERVER_ADDR; public static String NAMESPACE; public static String DATA_ID; public static String ROUTE_GROUP; /** * 路由配置文件数据获取方式yml,nacos,database */ public static String DATA_TYPE; @Value("${spring.cloud.nacos.discovery.server-addr}") public void setServerAddr(String serverAddr) { synchronized (GatewayRoutersConfiguration.class){ if(SERVER_ADDR == null){ SERVER_ADDR = serverAddr; } } } @Value("${spring.cloud.nacos.discovery.namespace}") public void setNamespace(String namespace) { synchronized (GatewayRoutersConfiguration.class){ if(NAMESPACE == null){ NAMESPACE = namespace; } } } @Value("${jero.route.config.data-id:#{null}}") public void setRouteDataId(String dataId) { synchronized (GatewayRoutersConfiguration.class){ if(DATA_ID == null){ DATA_ID = dataId + ".json"; } } } @Value("${jero.route.config.group:DEFAULT_GROUP:#{null}}") public void setRouteGroup(String routeGroup) { synchronized (GatewayRoutersConfiguration.class){ if(ROUTE_GROUP == null){ ROUTE_GROUP = routeGroup; } } } @Value("${jero.route.config.data-type}") public void setDataType(String dataType) { synchronized (GatewayRoutersConfiguration.class){ if(DATA_TYPE == null){ DATA_TYPE = dataType; } } } /** * 路由断言 * @return */ @Bean public RouterFunction routerFunction() { return RouterFunctions.route( RequestPredicates.path("/globalFallback").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), hystrixFallbackHandler); } @Bean public RouterFunction indexRouter(@Value("classpath:/META-INF/resources/doc.html") final org.springframework.core.io.Resource indexHtml) { return route(GET("/"), request -> ok().contentType(MediaType.TEXT_HTML).syncBody(indexHtml)); } @Resource private HystrixFallbackHandler hystrixFallbackHandler; }