Mohamed Osama
Mohamed Osama

Reputation: 51

Spring Boot 2: Refresh properties on the fly not working

I have followed this official tutorial Getting Started Centralized Configuration using spring boot 2.0.0.RELEASE and spring cloud Finchley.M8

But refreshing properties on the fly (Without restart) is not working. After Some debugging, I noticed that in method refresh() from ContextRefresher.class, it returns the changed keys correctly, but after reconstructing the bean annotated with @RefreshScope in the next use. It still sees the old value not the updated one.

Note: This was working perfectly with spring boot v 1.5.6 and spring cloud Edgware.RELEASE.

Any help please?

Thanks

Upvotes: 4

Views: 10978

Answers (3)

user12472350
user12472350

Reputation: 11

Use below in application.properties-

management.endpoint.refresh.enabled=true
management.endpoint.restart.enabled=true
management.endpoint.health.enabled=true
management.endpoint.health.show-details=always
management.endpoint.info.enabled=true
management.endpoints.web.exposure.include=info,health,refresh    

Using yaml configuration file it was not working for me and when switched to properties file, it worked with above configuration.

Thanks

Upvotes: 1

Sireesh Yarlagadda
Sireesh Yarlagadda

Reputation: 13716

enter image description here

Instead of Method "POST" , use "OPTIONS" method to call the "actuator/refresh" for spring boot 2.0 or higher.

For lower versions (<2.0), use the endpoint "context/refresh"

Make sure , you have management.endpoints.web.exposure.include=* defined in application.properties.

Upvotes: 1

Hany Sakr
Hany Sakr

Reputation: 2899

It seems spring.cloud.config.uri in spring boot 2.0.1.RELEASE always looking for port 8888 and not accepting other values, so I put the below configuration (you can ignore it, as it is the default value for the client, and the server should run on port 8888)

spring:
  cloud:
    config:
      uri: http://localhost:8888

I also tried to expose all other services in the client for testing as follows

management:
  endpoints:
    web:
      exposure:
        include: '*'

or use the following to allow only refresh

management:
  endpoints:
    web:
      exposure:
        include: refresh

Then called POST method not GET for refreshing

$ curl -X POST localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"

Finally, it works.

Upvotes: 7

Related Questions