概述
业务系统会经常性的随着业务的变更而频率的迭代,随着开发工作的完成,系统会在某个时间点或时间段内进行升级。而此时,我们肯定不希望用户在我们更新的时间里访问服务器。那么,这个时候我们就可以使用时间相关的谓词工厂来解决这个问题。
时间格式
在这些时间谓词中,时间可以是ZoneDateTime的格式,或者是时间的毫秒数。我们可以通过下面的方式获取指定的时间格式。
ZoneDateTime格式:
LocalDateTime localDateTime = LocalDateTime.of(2022,11,13,19,0,0);
ZonedDateTime after = ZonedDateTime.of(localDateTime,ZoneId.of(zoneString));
System.out.println(after);
上面的输出结果为:2022-11-17T19:00+08:00[Asia/Shanghai]
时间毫秒数格式:
LocalDateTime localDateTime = LocalDateTime.of(2022,11,17,19,0,0);
ZonedDateTime after = ZonedDateTime.of(localDateTime,ZoneId.of(zoneString));
long e = after.toInstant().toEpochMilli();
System.out.println(e);
上面的输出结果为:1668682800000
After
After路由谓词工厂接受一个时间类型的参数,时间格式可以是ZoneDateTime或时间毫秒数。它匹配指定时间以后发生的请求,这些请求会被路由到指定uri。
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: https://www.baidu.com/
predicates:
# - After=2022-11-17T19:00+08:00[Asia/Shanghai]
- After=1668682800000
Before
Before和After正好相反。路由谓词工厂接受一个时间类型的参数,时间格式可以是ZoneDateTime或时间毫秒数。它匹配指定时间之前发生的请求,这些请求会被路由到指定uri。
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: https://www.baidu.com/
predicates:
# - Before=2022-11-17T19:00+08:00[Asia/Shanghai]
- Before=1668682800000
Between
Between路由谓词工厂接受两个时间类型的参数,时间格式可以是ZoneDateTime或时间毫秒数。两个时间参数设置在一行,中间用逗号隔开。前一个参数我们暂时称为datetime1,后一个参数我们称为datetime2。它匹配发生成datetime1以后,datetime2以前的请求,这些请求会被路由到指定uri。
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: https://www.baidu.com/
predicates:
# - Before=2022-11-17T19:00+08:00[Asia/Shanghai],2022-11-17T19:00+08:00[Asia/Shanghai]
- Between=1668684000000,1668684180000