java - example - ¿Se puede activar/desactivar un arranque de resorte @RestController usando propiedades?
spring boot tutorial (1)
Encontré una solución simple usando @ConditionalOnExpression
:
@RestController
@ConditionalOnExpression("${my.controller.enabled:false}")
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8")
public class MyController {
@RequestMapping(value = "bar")
public ResponseEntity<String> bar(
return new ResponseEntity<>("Hello world", HttpStatus.OK);
}
}
Con esta anotación agregada, a menos que tenga
my.controller.enabled=true
en mi archivo application.properties
, el controlador no se iniciará en absoluto.
También puede usar el más conveniente:
@ConditionalOnProperty("my.property")
Que se comporta exactamente como arriba; si la propiedad está presente y es "true"
, el componente se inicia; de lo contrario, no es así.
Se le da una aplicación de arranque de resorte "estándar" con @RestController
, por ejemplo
@RestController
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8")
public class MyController {
@RequestMapping(value = "bar")
public ResponseEntity<String> bar(
return new ResponseEntity<>("Hello world", HttpStatus.OK);
}
}
¿Hay alguna anotación o técnica que evite que el punto final comience en absoluto si / a menos que exista o no una determinada propiedad de la aplicación?
Nota: Probar una propiedad dentro del método y la explosión no es una solución, porque el punto final existirá.
No me importa la granularidad: es decir, activar / desactivar solo un método o toda la clase son buenos.
Como un perfil no es una propiedad, el control a través de perfiles no resuelve mi problema.