Остановите Spring @Controller во время выполнения - PullRequest
0 голосов
/ 17 декабря 2018

Я нашел Можно ли включить / отключить пружинную загрузку @RestController с помощью свойств? , в которой говорится, что @Controller не запускается во время загрузки, но я ищу способ остановить @Controllerво время выполнения.

1 Ответ

0 голосов
/ 17 декабря 2018

Я бы на самом деле использовал бин @RefreshScope, а затем, когда вы хотите остановить Rest Controller во время выполнения, вам нужно только изменить свойство указанного контроллера на false.

SO link ссылка на изменение свойства во время выполнения.

Вот мои фрагменты рабочего кода:

@RefreshScope
@RestController
class MessageRestController(
    @Value("\${message.get.enabled}") val getEnabled: Boolean,
    @Value("\${message:Hello default}") val message: String
) {
    @GetMapping("/message")
    fun get(): String {
        if (!getEnabled) {
            throw NoHandlerFoundException("GET", "/message", null)
        }
        return message
    }
}

И есть другие варианты использования фильтра:

@Component
class EndpointsAvailabilityFilter @Autowired constructor(
    private val env: Environment
): OncePerRequestFilter() {
    override fun doFilterInternal(
        request: HttpServletRequest,
        response: HttpServletResponse,
        filterChain: FilterChain
    ) {
        val requestURI = request.requestURI
        val requestMethod = request.method
        val property = "${requestURI.substring(1).replace("/", ".")}." +
                "${requestMethod.toLowerCase()}.enabled"
        val enabled = env.getProperty(property, "true")
        if (!enabled.toBoolean()) {
            throw NoHandlerFoundException(requestMethod, requestURI, ServletServerHttpRequest(request).headers)
        }
        filterChain.doFilter(request, response)
    }
}

Мой Github объясняет, как отключитьво время выполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...