当前位置: 首页 > 知识库问答 >
问题:

Spring Cloud-配置客户端缓存属性

岳研
2023-03-14

当我从属性存储库中更改一个值并重新启动Spring云配置服务器时,这些更改不会反映在它的使用者身上。

我的微服务/应用程序。属性:

spring.application.name=my-service
spring.cloud.config.uri=http://localhost:8888

MyServiceController.java

@RestController
public class MyServiceController {

    @Autowired
    private Configuration configuration;

    @GetMapping("/my-service")
    public MyServiceBean retrieveMyServiceProperties() {
        // show propertie's values
        return new MyServiceBean(configuration.getPropertie1(), configuration.getPropertie2());
    }

}

spring云配置服务器/应用程序。属性

server.port=8888
spring.application.name=spring-cloud-config-server

spring.cloud.config.server.git.uri=file://path

Git repo

我的服务。属性

my-service.propertie1=1
my-service.propertie2=2

当我向localhost:8080/my-service发送GET请求时,这就是我得到的结果:

{  
   "propertie1":1,
   "propertie2":2
}

好吧,没关系!但是,如果我更改my-service.properties并重新启动我的Spring Cloud Config Server,这些更改不会反映MyServiceController。我确实需要重新启动my-microservice应用程序,以便更改生效。这是正常行为吗?我的意思是,如果这是远程的,那么,应该配置是否缓存。

共有2个答案

华温书
2023-03-14

要更新客户端应用程序,最好使用RabbitMQ或Apache Kafka之类的消息代理。该过程有三个层次:

>

  • 客户端应用程序和配置服务器订阅消息代理中的特定主题(/刷新)。

    一旦主题更新,配置服务器就会向该主题发送刷新事件(/刷新)。(例如,application.properties文件在git中更新)。

    所有客户端应用程序都在侦听刷新事件,当它们收到刷新消息时,它们将被更新

    简而言之,我们可以使用pub-sub模型来更新客户端应用程序。

    使用Spring Cloud Config和Apache Kafka配置服务器

  • 欧阳飞
    2023-03-14

    为了更新配置,我向本地主机8080/执行器/刷新发送了一个POST请求。

    默认情况下,执行器endpoint中不显示刷新。

    我在应用程序中使用以下行进行了曝光。属性:

    management.endpoints.web.exposure.include=*
    

    然后,向上面的endpoint发送一个没有正文的POST请求。

     类似资料:
    • 客户端配置项设置示例 lookoutConfig.setProperty(LookoutConfig.LOOKOUT_AGENT_HOST_ADDRESS,"127.0.0.1"); 客户端配置项说明 配置项 对应 SpringBoot 配置项 默认配置值 说明 lookout.enable com.alipay.sofa.lookout.enable true 功能开关,默认是 true。如

    • 我想知道以下问题的答案: 1)如果Ignite服务器重新启动,我需要重新启动客户端(web应用程序)。是否有任何方法可以在服务器重新启动时重新连接到服务器。我知道当服务器重新启动时,它分配了一个不同的ID,因此当前现有的连接变得过时。是否有方法克服这个问题,如果是的话,哪一个版本的Ignite支持这个功能。目前我使用1.7版本 3)如果我有一个大对象要缓存,我发现序列化和反序列化在Ignite中需

    • 问题内容: 我们有一个gwt-client,它从我们的服务器接收很多数据。从逻辑上讲,我想在客户端缓存数据,以免服务器收到不必要的请求。 截止到今天,我已经让我的模型来处理数据缓存,但伸缩性不是很好。这也成为一个问题,因为我们团队中的不同开发人员都开发了自己的“缓存”功能,从而使项目充满重复性。 我正在考虑如何实现一个“单入口”来处理所有缓存,而使模型对如何处理缓存一无所知。 有没有人在GWT中进

    • 我需要一些帮助来理解为什么在Eureka注册的服务会想要彼此通信,尽管没有实际运行。例如,我在尤里卡注册了服务A和服务B。如果我搞垮了服务B,那么即使服务A没有运行,它仍然会尝试与服务B进行30秒到3分钟的通信。这样做的目的是什么?有什么办法可以绕过它吗?谢谢你!

    • 我有一个配置服务器,一个Spring Boot2.3.1应用程序连接到该服务器,为正确的配置文件加载配置属性。 配置服务器使用git获取每个应用程序和配置文件的配置文件。 这工作正常,当Spring Boot应用程序启动时,它将从配置服务器加载属性的正确值。 当我在配置文件中更新一个值并将其推送到git中,然后对Spring Boot应用程序的endpoint执行操作时,我会看到返回一个json,

    • 反应阿波罗客户端应用程序。我试图使用readQuery从缓存中读取数据,但无法读取缓存字段。 这里有一个纲要: 组件调用,它执行我的查询并缓存结果。查询返回类型。一切都很好,开发工具显示包含一个名为getPost的字段和该帖子。 有一个子组件,它会在单击时删除评论。它调用并删除评论。查询返回类型。 Post有一个注释数组,现在我需要在缓存中更新它的数组并删除已删除的注释。我使用突变中的函数来获取缓