RouteDefinition实体类 记录了 PredicateDefinition 和 FilterDefinition
@NotEmpty
@Valid
private List<PredicateDefinition> predicates = new ArrayList<>();
@Valid
private List<FilterDefinition> filters = new ArrayList<>();
PredicateDefinition 记录 断言信息
@Validated
public class PredicateDefinition {
@NotNull
private String name;
private Map<String, String> args = new LinkedHashMap<>();
public PredicateDefinition() {
}
public PredicateDefinition(String text) {
int eqIdx = text.indexOf('=');
if (eqIdx <= 0) {
throw new ValidationException("Unable to parse PredicateDefinition text '"
+ text + "'" + ", must be of the form name=value");
}
setName(text.substring(0, eqIdx));
String[] args = tokenizeToStringArray(text.substring(eqIdx + 1), ",");
for (int i = 0; i < args.length; i++) {
this.args.put(NameUtils.generateName(i), args[i]);
}
}
}
FilterDefinition 记录 过滤拦截信息
@Validated
public class FilterDefinition {
@NotNull
private String name;
private Map<String, String> args = new LinkedHashMap<>();
public FilterDefinition() {
}
public FilterDefinition(String text) {
int eqIdx = text.indexOf('=');
if (eqIdx <= 0) {
setName(text);
return;
}
setName(text.substring(0, eqIdx));
String[] args = tokenizeToStringArray(text.substring(eqIdx + 1), ",");
for (int i = 0; i < args.length; i++) {
this.args.put(NameUtils.generateName(i), args[i]);
}
}
}
数据表创建
-- 路由规则表
CREATE TABLE `route_rule` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`route_id` varchar(255) DEFAULT NULL COMMENT '路由ID ',
`uri` varchar(255) DEFAULT NULL COMMENT '目标地址',
`ordered` int(11) DEFAULT NULL COMMENT '加载顺序',
`creator` varchar(30) DEFAULT NULL COMMENT '创建者',
`created_time` datetime DEFAULT NULL COMMENT '创建时间',
`updator` varchar(30) DEFAULT NULL COMMENT '修改人',
`updated_time datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 路由参数表 主要用来存储 断言器Predicates和过滤器Filter
-- route_rule与route_args 存在一对多的映射关系
CREATE TABLE `route_args` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`type` int(11) DEFAULT NULL COMMENT '参数类型 0:断言器 1:过滤器',
`name` varchar(255) DEFAULT NULL COMMENT '断言器名称 例如: Path RewritePath',
`args_name` varchar(255) DEFAULT NULL COMMENT '参数名称',
`args_value` varchar(255) DEFAULT NULL COMMENT '参数值',
`route_id` varchar(255) DEFAULT NULL COMMENT '表route_id中的字段route_id',
`creator` varchar(30) DEFAULT NULL COMMENT '创建者',
`c

本文介绍如何使用Spring Cloud Gateway实现动态路由配置,并通过MySQL存储路由信息。文章详细解析了自定义RouteDefinitionRepository接口来实现路由信息的动态加载,以及如何通过actuator监控并刷新路由。
最低0.47元/天 解锁文章
1566

被折叠的 条评论
为什么被折叠?



