當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
Spring Cloud Alibaba - 26 Gateway-自定义谓词工厂RoutePredicateFactory
生活随笔
收集整理的這篇文章主要介紹了
Spring Cloud Alibaba - 26 Gateway-自定义谓词工厂RoutePredicateFactory
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 需求
- 三部曲
- 第一步 搞配置類(lèi)
- 第二步 搞自定義謂詞工廠
- 第三部 搞配置
- 驗(yàn)證
- 源碼
需求
我們看了官方提供的幾個(gè)例子,如果都不滿足呢?
舉個(gè)例子: 實(shí)現(xiàn)一個(gè)類(lèi)似 12306訂票管控的需求: 早上6點(diǎn)到23點(diǎn),才允許業(yè)務(wù)進(jìn)行。
三部曲
第一步 搞配置類(lèi)
package com.artisan.custom;import lombok.Data;import java.time.LocalTime;/*** @author 小工匠* @version 1.0* @description: TODO* @date 2022/2/14 0:21* @mark: show me the code , change the world*/@Data public class CustomTimeBetweenConfig {private LocalTime startTime;private LocalTime endTime; }第二步 搞自定義謂詞工廠
類(lèi)名必須要以RoutePredicateFactory結(jié)尾,然后繼承AbstractRoutePredicateFactory
package com.artisan.custom;import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange;import java.time.LocalTime; import java.util.Arrays; import java.util.List; import java.util.function.Predicate;/*** @author 小工匠* @version 1.0* @description: TODO* @date 2022/2/14 0:20* @mark: show me the code , change the world*/@Component @Slf4j public class CustomTimeBetweenRoutePredicateFactory extends AbstractRoutePredicateFactory<CustomTimeBetweenConfig> {public CustomTimeBetweenRoutePredicateFactory() {super(CustomTimeBetweenConfig.class);}/**** 真正的業(yè)務(wù)判斷邏輯* @param config* @return*/@Overridepublic Predicate<ServerWebExchange> apply(CustomTimeBetweenConfig config) {LocalTime startTime = config.getStartTime();LocalTime endTime = config.getEndTime();return new Predicate<ServerWebExchange>() {@Overridepublic boolean test(ServerWebExchange serverWebExchange) {LocalTime now = LocalTime.now();//判斷當(dāng)前時(shí)間是否在在配置的時(shí)間范圍類(lèi)return now.isAfter(startTime) && now.isBefore(endTime);}};}/*** 用于接受yml中的配置CustomTimeBetween=上午6:00,下午11:00** @return*/@Overridepublic List<String> shortcutFieldOrder() {return Arrays.asList("startTime", "endTime");}}第三部 搞配置
在yml配置中謂詞配置是以我們自定義類(lèi)CustomTimeBetweenRoutePredicateFactory
去除了RoutePredicateFactory接受開(kāi)頭CustomTimeBetween
application-custom.yml
# 自定義謂詞工廠 spring:cloud:gateway:routes:- id: custom-timeBetween #id必須要唯一uri: lb://artisan-cloud-gateway-orderpredicates:#當(dāng)前請(qǐng)求的時(shí)間必須在早上6點(diǎn)到 晚上11點(diǎn) http://localhost:8888/selectOrderInfoById/1#才會(huì)被轉(zhuǎn)發(fā)#到http://artisan-cloud-gateway-order/selectOrderInfoById/1- CustomTimeBetween=上午06:00,下午11:00激活profile
驗(yàn)證
public static void main(String[] args) {System.out.println(LocalTime.now());}現(xiàn)在是
訪問(wèn)肯定不行
debug走下
改改時(shí)間 符合規(guī)則 試試能行嗎
OK, 妥妥的實(shí)現(xiàn)了
源碼
https://github.com/yangshangwei/SpringCloudAlibabMaster
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud Alibaba - 26 Gateway-自定义谓词工厂RoutePredicateFactory的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spring Cloud Alibaba
- 下一篇: SpringBoot - 统一格式封装及