Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@RefreshScope with @ConditionalOnProperty does not work

Problem

Exploring an option of enabling/disabling a @RequestMapping endpoint on demand without restarting JVM. Implement a kill switch on a endpoint at runtime.

Attempt

I've tried the following but @RefreshScope does not seem to work with @ConditionOnProperty

@RestController
@RefreshScope
@ConditionalOnProperty(name = "stackoverflow.endpoints", havingValue = "enabled")
public class MyController {

    @Value("${stackoverflow.endpoints}")
    String value;

    @RequestMapping(path = "/sample", method = RequestMethod.GET)
    public ResponseEntity<String> process() {
        return ResponseEntity.ok(value);
    }

}

Updated property using

POST /env?stackoverflow.endpoints=anyvalue

And reloaded context using

POST /refresh

At this point the controller returns the updated value.

Question

Are there any other ways to achieve the desired functionality?

like image 200
MajorXbox Avatar asked Sep 18 '17 03:09

MajorXbox


1 Answers

Conditions in Boot are only applied at the Configuration class level or at the bean definition level.

This might help you.

public class MyWebConfiguration extends WebMvcConfigurationSupport {
 @Bean
 @ConditionalOnProperty(prefix="stackoverflow.endpoints",name = "enabled")
 public MyController myController() {
    return new MyController ();
 }
}
like image 186
Grinish Nepal Avatar answered Oct 13 '22 13:10

Grinish Nepal