猪哥哥呀 2020-12-15 17:15 采纳率: 0%
浏览 30

spring-cloud-bus修改git配置,自定义字段更新,但请求mysql数据未更新

浏览遍了网上的各种教程,但是并未找到解决此问题的方法。

  1. git上自定义的字段在Controller中请求测试是ok的,因为在controller类上有@RefreshScope注解所以更改自定义配置字段正常更新。
  2. 但是修改了数据库连接的url,请求数据依旧是之前的数据库。
  3. 客户端和服务端均能收到rabbitmq的消息,但是客户端查询数据库数据就是不更新
  4. 重启客户端数据才能更新

截图:

修改git上的sms.ip的值,请求更新后,能够正常获取新的ip

但是修改datasource.url查询数据库数据却依旧不变

git配置截图:

config-server端也暴露了触发消息总线的地址

如果说刷新客户端配置必须要加上@RefreshScope,那么对于这种修改默认配置spring.datasource.url有何意义呢。

使用的springboot:2.3.4,springcloud:Hoxton.SR9

 

  • 写回答

3条回答 默认 最新

  • 孟林洁 2020-12-15 17:52
    关注

    可以参考一下这个动态路由的实现。我最近也有这个疑问

    @RefreshScope
    @Slf4j
    @Component
    public class DynamicRouteConfig implements ApplicationEventPublisherAware {
    
        /**
         * nacos 配置dataId
         */
        @Value("${config.dynamic.route.dataId:gateway-router}")
        private String dataId;
        /**
         * nacos 配置group
         */
        @Value("${config.dynamic.route.group:DEFAULT_GROUP}")
        private String group;
        /**
         * nacos 配置地址
         */
        @Value("${spring.cloud.nacos.config.server-addr}")
        private String serverAddr;
        /**
         * nacos namespace 配置地址
         */
        @Value("${spring.cloud.nacos.config.namespace}")
        private String namespace;
    
        @Autowired
        private RouteDefinitionWriter routeDefinitionWriter;
    
        private ApplicationEventPublisher applicationEventPublisher;
    
        private static final List<String> ROUTE_LIST = new ArrayList<>();
    
        @PostConstruct
        public void dynamicRouteByNacosListener() {
            try {
                // 创建ConfigService
                Properties properties = new Properties();
                properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
                properties.put(PropertyKeyConst.NAMESPACE, namespace);
                ConfigService configService = NacosFactory.createConfigService(properties);
    
                // 程序首次启动, 并加载初始化路由配置
                String initConfigInfo = configService.getConfig(dataId, group, 5000);
                this.addAndPublishBatchRoute(initConfigInfo);
    
                //添加监听路由变化
                configService.addListener(dataId, group, new Listener() {
                    @Override
                    public void receiveConfigInfo(String configInfo) {
                        clearRoute();
                        try {
                            List<RouteDefinition> gatewayRouteDefinitions = JSONObject.parseArray(configInfo, RouteDefinition.class);
                            for (RouteDefinition routeDefinition : gatewayRouteDefinitions) {
                                addRoute(routeDefinition);
                            }
                            publish();
                            log.info("gateway路由配置修改成功, 配置信息: {}", JSON.toJSONString(gatewayRouteDefinitions));
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
    
                    @Override
                    public Executor getExecutor() {
                        return null;
                    }
                });
            } catch (NacosException e) {
                e.printStackTrace();
            }
        }
    
    
        private void publish() {
            this.applicationEventPublisher.publishEvent(new RefreshRoutesEvent(this.routeDefinitionWriter));
        }
    
        @Override
        public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
            this.applicationEventPublisher = applicationEventPublisher;
        }
    
        /**
         * 批量 添加及发布 路由
         *
         * @param configInfo 配置文件字符串, 必须为json array格式
         */
        private void addAndPublishBatchRoute(String configInfo) {
            try {
                clearRoute();
                List<RouteDefinition> gatewayRouteDefinitions = JSONObject.parseArray(configInfo, RouteDefinition.class);
                for (RouteDefinition routeDefinition : gatewayRouteDefinitions) {
                    addRoute(routeDefinition);
                }
                publish();
                log.info("gateway路由配置初始化结束, 配置信息: {}", JSON.toJSONString(gatewayRouteDefinitions));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 清除路由信息
         */
        private void clearRoute() {
            for (String id : ROUTE_LIST) {
                this.routeDefinitionWriter.delete(Mono.just(id)).subscribe();
            }
            ROUTE_LIST.clear();
        }
    
        /**
         * 添加路由
         *
         * @param definition
         */
        private void addRoute(RouteDefinition definition) {
            try {
                routeDefinitionWriter.save(Mono.just(definition)).subscribe();
                ROUTE_LIST.add(definition.getId());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀