
在配置文件中定义了Timbetween所以我们需要新建一个predicateFactory来进行自定义配置
新建一个TimeBetweenPredicateFactory(“TimeBetween”+“PredicateFactory”-》只有这样才能配解析)
package com.itmuch.gateway;
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.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
@Component
public class TimeBetweenRoutePredicateFactory extends
AbstractRoutePredicateFactory<TimeBetweenConfig> {
public TimeBetweenRoutePredicateFactory() {
super(TimeBetweenConfig.class);
}
@Override
public Predicate<ServerWebExchange> apply(TimeBetweenConfig config) {
LocalTime start = config.getStart();
LocalTime end = config.getEnd();
return exchange->{
LocalTime now = LocalTime.now();
return now.isAfter(start) && now.isBefore(end);
};
}
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList("start","end");
}
public static void main(String[] args) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
System.out.println(dateTimeFormatter.format(LocalTime.now()));
}
}继承
AbstractRoutePredicateFactory<>
需要用到泛型,这里的泛型是需要定义一个配置类来给配置参数,下面是配置类,配置开始时间和结束时间
package com.itmuch.gateway;
import lombok.Data;
import java.time.LocalTime;
@Data
public class TimeBetweenConfig {
private LocalTime start;
private LocalTime end;
}在TimeBetweenPredicateFactory中重写的
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList("start","end");
}用来映射参数,asList("配置文件的第1个参数","配置文件的第2个参数","配置文件的第3个参数","配置文件的第4个参数"....),接给配置类,配置类得到参数后里面的参数有值然后在重写的
@Override
public Predicate<ServerWebExchange> apply(TimeBetweenConfig config) {
LocalTime start = config.getStart();
LocalTime end = config.getEnd();
return exchange->{
LocalTime now = LocalTime.now();
return now.isAfter(start) && now.isBefore(end);
};
}中进行谓词配置,实现自定义谓词工厂
根据java8新特性,可以查看这里时间格式
public static void main(String[] args) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
System.out.println(dateTimeFormatter.format(LocalTime.now()));
}
随时随地看视频