iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Nacos+Spring Cloud Gateway动态路由如何配置实现
  • 118
分享到

Nacos+Spring Cloud Gateway动态路由如何配置实现

2023-06-20 21:06:24 118人浏览 独家记忆
摘要

小编给大家分享一下Nacos+spring cloud Gateway动态路由如何配置实现,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言  Nacos最近项目一直在使用,其简单灵活,支持更细粒度的命令空间,分组等为麻烦

小编给大家分享一下Nacos+spring cloud Gateway动态路由如何配置实现,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

    前言

      Nacos最近项目一直在使用,其简单灵活,支持更细粒度的命令空间,分组等为麻烦复杂的环境切换提供了方便;同时也很好支持动态路由的配置,只需要简单的几步即可。在国产的注册中心、配置中心中比较突出,容易上手,本文通过gateway、nacos-consumer、nacos-provider三个简单模块来展示:Nacos下动态路由配置。

     博文中源码已上传至GitHub(https://github.com/Jian0110/learning-cloudalibaba),欢迎小伙伴们star

    一、Nacos环境准备

    1、启动Nacos配置中心并创建路由配置

    具体的Nacos怎么配置就不介绍了,可以参考阿里巴巴的官方介绍,这里通过windows直接本地启动开启单机模式,登录Nacos Console,创建dev的namespace,在dev下的默认分组下创建gateway-router的dataid

    Nacos+Spring Cloud Gateway动态路由如何配置实现

    gateway-router的主要初始化配置如下:关于gateway的组成(id,order、predicates断言,uri)这里就不详细说明的了,可以自行百度下

    Nacos+Spring Cloud Gateway动态路由如何配置实现

    [{    "id": "consumer-router",    "order": 0,    "predicates": [{        "args": {            "pattern": "/consume@Configurationpublic class GatewayConfig {    public static final long DEFAULT_TIMEOUT = 30000;    public static String NACOS_SERVER_ADDR;    public static String NACOS_NAMESPACE;    public static String NACOS_ROUTE_DATA_ID;    public static String NACOS_ROUTE_GROUP;    @Value("${spring.cloud.nacos.discovery.server-addr}")    public void setNacosServerAddr(String nacosServerAddr){        NACOS_SERVER_ADDR = nacosServerAddr;    }    @Value("${spring.cloud.nacos.discovery.namespace}")    public void setNacosNamespace(String nacosNamespace){        NACOS_NAMESPACE = nacosNamespace;    }    @Value("${nacos.gateway.route.config.data-id}")    public void setNacosRouteDataId(String nacosRouteDataId){        NACOS_ROUTE_DATA_ID = nacosRouteDataId;    }    @Value("${nacos.gateway.route.config.group}")    public void setNacosRouteGroup(String nacosRouteGroup){        NACOS_ROUTE_GROUP = nacosRouteGroup;    }}

    properties配置关于Nacos下读取gateway-router的配置:

    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848spring.cloud.nacos.discovery.namespace=08ecd1e5-c042-410a-84d5-b0a8fbeed8eanacos.gateway.route.config.data-id=gateway-routernacos.gateway.route.config.group=DEFAULT_GROUP

    第二,初始化路由,监听动态路由配置的数据源变化(2020.12.28解决删除路由不生效问题);

    @Component@Slf4j@DependsOn({"gatewayConfig"}) // 依赖于gatewayConfig beanpublic class DynamicRouteServiceImplByNacos {    @Autowired    private DynamicRouteServiceImpl dynamicRouteService;    private ConfigService configService;    @PostConstruct    public void init() {        log.info("gateway route init...");        try{            configService = initConfigService();            if(configService == null){                log.warn("initConfigService fail");                return;            }            String configInfo = configService.getConfig(GatewayConfig.NACOS_ROUTE_DATA_ID, GatewayConfig.NACOS_ROUTE_GROUP, GatewayConfig.DEFAULT_TIMEOUT);            log.info("获取网关当前配置:\r\n{}",configInfo);            List<RouteDefinition> definitionList = JSON.parseArray(configInfo, RouteDefinition.class);            for(RouteDefinition definition : definitionList){                log.info("update route : {}",definition.toString());                dynamicRouteService.add(definition);            }        } catch (Exception e) {            log.error("初始化网关路由时发生错误",e);        }        dynamicRouteByNacosListener(GatewayConfig.NACOS_ROUTE_DATA_ID,GatewayConfig.NACOS_ROUTE_GROUP);    }        public void dynamicRouteByNacosListener (String dataId, String group){        try {            configService.addListener(dataId, group, new Listener()  {                @Override                public void receiveConfigInfo(String configInfo) {                    log.info("进行网关更新:\n\r{}",configInfo);                    List<RouteDefinition> definitionList = jsON.parseArray(configInfo, RouteDefinition.class);                    log.info("update route : {}",definitionList.toString());                    dynamicRouteService.updateList(definitionList);                }                @Override                public Executor getExecutor() {                    log.info("getExecutor\n\r");                    return null;                }            });        } catch (NacosException e) {            log.error("从nacos接收动态路由配置出错!!!",e);        }    }        private ConfigService initConfigService(){        try{            Properties properties = new Properties();            properties.setProperty("serverAddr",GatewayConfig.NACOS_SERVER_ADDR);            properties.setProperty("namespace",GatewayConfig.NACOS_NAMESPACE);            return configService= NacosFactory.createConfigService(properties);        } catch (Exception e) {            log.error("初始化网关路由时发生错误",e);            return null;        }    }}

    第三,刷新最新的动态路由变化,实现动态增删改路由(2020.12.28解决删除路由不生效问题)

    @Slf4j@Servicepublic class DynamicRouteServiceImpl implements ApplicationEventPublisherAware {    @Autowired    private RouteDefinitionWriter routeDefinitionWriter;    @Autowired    private RouteDefinitionLocator routeDefinitionLocator;        @Autowired    private ApplicationEventPublisher publisher;    @Override    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {        this.publisher = applicationEventPublisher;    }        public String delete(String id) {        try {            log.info("gateway delete route id {}",id);            this.routeDefinitionWriter.delete(Mono.just(id)).subscribe();            this.publisher.publishEvent(new RefreshRoutesEvent(this));            return "delete success";        } catch (Exception e) {            return "delete fail";        }    }        public String updateList(List<RouteDefinition> definitions) {        log.info("gateway update route {}",definitions);        // 删除缓存routerDefinition        List<RouteDefinition> routeDefinitionsExits =  routeDefinitionLocator.getRouteDefinitions().buffer().blockFirst();        if (!CollectionUtils.isEmpty(routeDefinitionsExits)) {            routeDefinitionsExits.forEach(routeDefinition -> {                log.info("delete routeDefinition:{}", routeDefinition);                delete(routeDefinition.getId());            });        }        definitions.forEach(definition -> {            updateById(definition);        });        return "success";    }        public String updateById(RouteDefinition definition) {        try {            log.info("gateway update route {}",definition);            this.routeDefinitionWriter.delete(Mono.just(definition.getId()));        } catch (Exception e) {            return "update fail,not find route  routeId: "+definition.getId();        }        try {            routeDefinitionWriter.save(Mono.just(definition)).subscribe();            this.publisher.publishEvent(new RefreshRoutesEvent(this));            return "success";        } catch (Exception e) {            return "update route fail";        }    }        public String add(RouteDefinition definition) {        log.info("gateway add route {}",definition);        routeDefinitionWriter.save(Mono.just(definition)).subscribe();        this.publisher.publishEvent(new RefreshRoutesEvent(this));        return "success";    }}

    三、测试动态网关配置

    1、启动服务,观察注册中心

    分别启动gateway、nacos-consumer、nacos-provider三个服务,观察是否已经在Nacos上正确注册

    Nacos+Spring Cloud Gateway动态路由如何配置实现

    注意:需要指定注册中心的namespace为dev的空间,即spring.cloud.nacos.discovery.namespace=08ecd1e5-c042-410a-84d5-b0a8fbeed8ea

    2、访问网关,观察服务日志

    (1)查看gateway服务的初始化启动日志:会发现可以正常从Nacos获取配置gateway-router网关配置文件内容,并进行正确路由加载...

    2020-05-10 14:33:44.557  INFO 1272 --- [           main] c.g.r.DynamicRouteServiceImplByNacos     : gateway route init...2020-05-10 14:33:44.578  INFO 1272 --- [           main] c.g.r.DynamicRouteServiceImplByNacos     : 获取网关当前配置:[{    "id": "consumer-router",    "order": 0,    "predicates": [{        "args": {            "pattern": "/consume/**"        },        "name": "Path"    }],    "uri": "lb://nacos-consumer"},{    "id": "provider-router",    "order": 2,    "predicates": [{        "args": {            "pattern": "/provide/**"        },        "name": "Path"    }],    "uri": "lb://nacos-provider"}]2020-05-10 14:33:44.691  INFO 1272 --- [           main] c.g.r.DynamicRouteServiceImplByNacos     : update route : RouteDefinition{id='consumer-router', predicates=[PredicateDefinition{name='Path', args={pattern=/consume/**}}], filters=[], uri=lb://nacos-consumer, order=0, metadata={}}2020-05-10 14:33:44.691  INFO 1272 --- [           main] c.g.service.DynamicRouteServiceImpl      : gateway add route RouteDefinition{id='consumer-router', predicates=[PredicateDefinition{name='Path', args={pattern=/consume/**}}], filters=[], uri=lb://nacos-consumer, order=0, metadata={}}2020-05-10 14:33:45.192  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [After]2020-05-10 14:33:45.192  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Before]2020-05-10 14:33:45.192  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Between]2020-05-10 14:33:45.193  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Cookie]2020-05-10 14:33:45.193  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Header]2020-05-10 14:33:45.193  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Host]2020-05-10 14:33:45.194  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Method]2020-05-10 14:33:45.194  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Path]2020-05-10 14:33:45.194  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Query]2020-05-10 14:33:45.194  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [ReadBodyPredicateFactory]2020-05-10 14:33:45.194  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [RemoteAddr]2020-05-10 14:33:45.194  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Weight]2020-05-10 14:33:45.194  INFO 1272 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [CloudFoundryRouteService]2020-05-10 14:33:45.335  INFO 1272 --- [           main] c.g.r.DynamicRouteServiceImplByNacos     : update route : RouteDefinition{id='provider-router', predicates=[PredicateDefinition{name='Path', args={pattern=/provide/**}}], filters=[], uri=lb://nacos-provider, order=2, metadata={}}2020-05-10 14:33:45.335  INFO 1272 --- [           main] c.g.service.DynamicRouteServiceImpl      : gateway add route RouteDefinition{id='provider-router', predicates=[PredicateDefinition{name='Path', args={pattern=/provide/**}}], filters=[], uri=lb://nacos-provider, order=2, metadata={}}2020-05-10 14:33:45.336  INFO 1272 --- [           main] c.g.r.DynamicRouteServiceImplByNacos     : update route : RouteDefinition{id='github-router', predicates=[PredicateDefinition{name='Path', args={pattern=/github}}], filters=[], uri=Https://github.com, order=3, metadata={}}2020-05-10 14:33:45.336  INFO 1272 --- [           main] c.g.service.DynamicRouteServiceImpl      : gateway add route RouteDefinition{id='github-router', predicates=[PredicateDefinition{name='Path', args={pattern=/github}}], filters=[], uri=https://github.com, order=3, metadata={}}

    但这只能说明是初始化静态路由,下面我们改变gateway-router网关配置内容,追加github-router路由

    [{    "id": "consumer-router",    "order": 0,    "predicates": [{        "args": {            "pattern": "/consume/**"        },        "name": "Path"    }],    "uri": "lb://nacos-consumer"},{    "id": "provider-router",    "order": 2,    "predicates": [{        "args": {            "pattern": "/provide/**"        },        "name": "Path"    }],    "uri": "lb://nacos-provider"},{    "id": "github-router",    "order": 2,    "predicates": [{        "args": {            "pattern": "/github/**"        },        "name": "Path"    }],    "uri": "https://github.com"}]

    之后点击发布更新路由配置

    Nacos+Spring Cloud Gateway动态路由如何配置实现

    观察gateway服务日志,有没有监听,并且进行正确的路由更新:如下日志所示,最新路由配置立马被打印,并且进行正确路由更新

    2020-05-10 14:42:27.576  INFO 1272 --- [d5-b0a8fbeed8ea] c.g.r.DynamicRouteServiceImplByNacos     : 进行网关更新:[{    "id": "consumer-router",    "order": 0,    "predicates": [{        "args": {            "pattern": "/consume/**"        },        "name": "Path"    }],    "uri": "lb://nacos-consumer"},{    "id": "provider-router",    "order": 2,    "predicates": [{        "args": {            "pattern": "/provide/**"        },        "name": "Path"    }],    "uri": "lb://nacos-provider"},{    "id": "github-router",    "order": 2,    "predicates": [{        "args": {            "pattern": "/github/**"        },        "name": "Path"    }],    "uri": "https://github.com"}]2020-05-10 14:42:27.576  INFO 1272 --- [d5-b0a8fbeed8ea] c.g.r.DynamicRouteServiceImplByNacos     : update route : RouteDefinition{id='consumer-router', predicates=[PredicateDefinition{name='Path', args={pattern=/consume/**}}], filters=[], uri=lb://nacos-consumer, order=0, metadata={}}2020-05-10 14:42:27.576  INFO 1272 --- [d5-b0a8fbeed8ea] c.g.service.DynamicRouteServiceImpl      : gateway update route RouteDefinition{id='consumer-router', predicates=[PredicateDefinition{name='Path', args={pattern=/consume/**}}], filters=[], uri=lb://nacos-consumer, order=0, metadata={}}2020-05-10 14:42:27.578  INFO 1272 --- [d5-b0a8fbeed8ea] c.g.r.DynamicRouteServiceImplByNacos     : update route : RouteDefinition{id='provider-router', predicates=[PredicateDefinition{name='Path', args={pattern=/provide/**}}], filters=[], uri=lb://nacos-provider, order=2, metadata={}}2020-05-10 14:42:27.578  INFO 1272 --- [d5-b0a8fbeed8ea] c.g.service.DynamicRouteServiceImpl      : gateway update route RouteDefinition{id='provider-router', predicates=[PredicateDefinition{name='Path', args={pattern=/provide/**}}], filters=[], uri=lb://nacos-provider, order=2, metadata={}}2020-05-10 14:42:27.580  INFO 1272 --- [d5-b0a8fbeed8ea] c.g.r.DynamicRouteServiceImplByNacos     : update route : RouteDefinition{id='github-router', predicates=[PredicateDefinition{name='Path', args={pattern=/github/**}}], filters=[], uri=https://github.com, order=2, metadata={}}2020-05-10 14:42:27.580  INFO 1272 --- [d5-b0a8fbeed8ea] c.g.service.DynamicRouteServiceImpl      : gateway update route RouteDefinition{id='github-router', predicates=[PredicateDefinition{name='Path', args={pattern=/github/**}}], filters=[], uri=https://github.com, order=2, metadata={}}

    其实,还有办法可以知道我们的gateway服务有没有监听Nacos的gateway-router配置,那就是在Nacos Console--->监听查询----->选择配置---->输入配置文件的namespace与Group:可以发现我本地IP地址127.0.0.1对配置文件gateway-router进行了监听

    Nacos+Spring Cloud Gateway动态路由如何配置实现

    (2)访问gateway网关服务:http://localhost:6003/consume/sayHello/nacos

      Nacos+Spring Cloud Gateway动态路由如何配置实现

    查看consumer服务日志:

    2020-05-10 14:55:07.257 INFO 6552 --- [NIO-6001-exec-2] c.n.c.controller.ConsumeController : I'm calling nacos-consumer service by dynamic gateway...

    发现跳转至consumer服务,并且访问了consumer服务的CosnumerController

    (3)访问gateway网关服务:http://localhost:6003/provider/sayHello/nacos

    Nacos+Spring Cloud Gateway动态路由如何配置实现

    查看provider服务日志:

    2020-05-10 14:56:56.144 INFO 10024 --- [nio-6002-exec-1] c.n.p.controller.ProviderController : I'm calling nacos-provider service by dynamic gateway...

    发现跳转至consumer服务,并且访问了provider服务的ProviderController

    (4)访问访问gateway网关服务:http://localhost:6003/github,正确跳转至github页面

    Nacos+Spring Cloud Gateway动态路由如何配置实现

    四、总结

      1)Spring Cloud Gateway作用不光只是简单的跳转重定向,还可以实现用户的验证登录,解决跨域,日志拦截,权限控制,限流,熔断,负载均衡,黑名单和白名单机制等。是微服务架构不二的选择;

      2)Nacos的配置中心支持动态获取配置文件,可以将一些全局的经常变更的配置文件放在Nacos下,需要到微服务自行获取。

    2020.12.28解决删除路由不生效问题,主要是利用RouteDefinitionLocator先读取变化之前的RouteDefinition,之后删除重新再更新,或者可以实现routeDefinitionWriter、RouteDefinitionLocator重写如下方法:

    Mono<Void> save(Mono<RouteDefinition> route);Mono<Void> delete(Mono<String> routeId);Flux<RouteDefinition> getRouteDefinitions();

    看完了这篇文章,相信你对“Nacos+Spring Cloud Gateway动态路由如何配置实现”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

    --结束END--

    本文标题: Nacos+Spring Cloud Gateway动态路由如何配置实现

    本文链接: https://www.lsjlt.com/news/300121.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Nacos+Spring Cloud Gateway动态路由如何配置实现
      小编给大家分享一下Nacos+Spring Cloud Gateway动态路由如何配置实现,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言  Nacos最近项目一直在使用,其简单灵活,支持更细粒度的命令空间,分组等为麻烦...
      99+
      2023-06-20
    • Nacos+Spring Cloud Gateway动态路由配置实现步骤
      目录前言一、Nacos环境准备1、启动Nacos配置中心并创建路由配置2、连接Nacos配置中心二、项目构建1、项目结构2、编写测试代码三、测试动态网关配置1、启动服务,观察注册中心...
      99+
      2022-11-12
    • Spring Cloud Gateway动态路由Apollo实现详解
      目录背景路由的加载实现动态路由背景 在之前我们了解的Spring Cloud Gateway配置路由方式有两种方式 通过配置文件 spring: cloud: gatew...
      99+
      2022-11-13
      Spring Cloud Gateway Apollo Spring Cloud Gateway 动态路由
    • 配置gateway+nacos动态路由管理流程
      目录配置gateway+nacos动态路由第一步:首先是设置配置文件的配置列表第二步:配置监听nacos监听器第三步:配置nacos的yml文件nacos的智能路由实现与应用一. 概...
      99+
      2022-11-12
    • Spring Cloud 整合 nacos实现动态配置中心的详细步骤
      目录前提条件整合步骤1. 添加依赖2. 新建 nacos 配置3. bootstrap.properties 配置4. 配置dataId4.1 自动配置 dataId4.2 手动设置...
      99+
      2022-11-13
      Spring Cloud 整合 nacos配置中心 Spring Cloud 整合 nacos Spring Cloud 整合 nacos动态配置
    • Spring Cloud中的动态路由怎么利用 Zuul实现
      今天就跟大家聊聊有关Spring Cloud中的动态路由怎么利用 Zuul实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Zuul 是提供动态路由,监控,弹性,安全等的边缘服务。Z...
      99+
      2023-05-31
      springcloud zuul 动态路由
    • 如何配置OSPF动态路由
      小编给大家分享一下如何配置OSPF动态路由,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!OSPF开放式最短路径优先协议,是目前网络中应用最广泛的路由协议之一。属于...
      99+
      2023-06-27
    • 如何在Go语言中实现路由的动态路由匹配
      Go语言是一门快速、高效、安全、并发的编程语言,被越来越多的开发者广泛应用于Web开发中。在Web应用程序中,路由是非常重要的一环,它的作用是将请求分发到不同的处理器函数中。在此基础上,动态路由匹配更是一种灵活、高效的路由实现方式。本文将介...
      99+
      2023-12-17
      Go语言 路由 动态匹配
    • PHP中使用路由匹配器实现路由规则的动态配置和扩展
      在Web应用程序中,路由规则是非常重要的一部分。它决定了如何根据用户的请求将其映射到相应的处理程序或控制器。传统的做法是在应用程序的代码中硬编码路由规则,这样会导致代码难以维护和扩展。为了解决这个问题,可以使用路由匹配器来实现路由规则的动态...
      99+
      2023-10-21
      路由匹配器 (Route Matcher) 路由规则 (Route Rules) 动态配置 (Dynamic Confi
    • Vue router动态路由如何实现
      本文小编为大家详细介绍“Vue router动态路由如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue router动态路由如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实...
      99+
      2023-07-05
    • vue后台管理如何配置动态路由菜单
      目录后台管理配置动态路由菜单根据权限生成动态路由及导航菜单后台管理配置动态路由菜单 前段时间做一个后台管理项目,因为超级管理员可以给普通管理员动态更改权限,所以vue-element...
      99+
      2022-11-13
    • vue动态路由指的是什么该如何配置
      今天小编给大家分享一下vue动态路由指的是什么该如何配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在vue中,动态路由就...
      99+
      2023-06-29
    • Vue如何实现动态路由导航
      这篇文章主要介绍“Vue如何实现动态路由导航”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue如何实现动态路由导航”文章能帮助大家解决问题。1、导航守卫“导航” 表示路由正在发生改变正如其名,vu...
      99+
      2023-07-05
    • VUE路由动态加载如何实现
      这篇文章主要讲解了“VUE路由动态加载如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VUE路由动态加载如何实现”吧!首先新建vue工程,一般我们不会特殊处理路由,但当项目页面越来越多...
      99+
      2023-07-04
    • spring schedule如何实现动态配置执行时间
      本篇内容介绍了“spring schedule如何实现动态配置执行时间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!spring sched...
      99+
      2023-06-25
    • 如何使用Quagga实现Linux动态路由
      这篇文章给大家分享的是有关如何使用Quagga实现Linux动态路由的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。OSPF 的意思是最短路径优先Open Shortest Path First。OSPF &nbs...
      99+
      2023-06-16
    • vue如何动态添加store、路由和国际化配置方式
      这篇文章主要为大家展示了“vue如何动态添加store、路由和国际化配置方式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何动态添加store、路由和国际化配置方式”这篇文章吧。vue动...
      99+
      2023-06-29
    • SpringCloud如何使用Feign实现动态路由操作
      这篇文章主要介绍“SpringCloud如何使用Feign实现动态路由操作”,在日常操作中,相信很多人在SpringCloud如何使用Feign实现动态路由操作问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
      99+
      2023-06-30
    • spring boot如何配置静态路径详解(404出现的坑)
      目录一  前言二  漫长的调试之路总结一  前言 最近有个项目,需要上传一个zip文件(zip文件就是一堆的html压缩组成)的压缩文件,然后后端解压出...
      99+
      2022-11-13
    • 如何实现自动配置Spring Boot框架
      本篇文章为大家展示了如何实现自动配置Spring Boot框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、新建starter的Maven项目我这里以IntelliJ IDEA创建Project...
      99+
      2023-05-31
      springboot 自动配置 spring boo
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作