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

在运行时停止Spring@Controller

翁和正
2023-03-14

我发现可以使用属性启用/禁用spring boot@RestController吗?它解决了在引导时不启动@控制器的问题,但我正在寻找一种在运行时停止@控制器的方法。

共有1个答案

燕青青
2023-03-14

我实际上会使用@ReFresScope Bean,然后当您想在运行时停止Rest Controller时,您只需要将所述控制器的属性更改为false。

SO的链接引用在运行时更改属性。

以下是我的工作代码片段:

@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)
    }
}

My Github解释如何在运行时禁用

 类似资料:
  • Firebase在大约一个小时后停止连接到数据库并停止工作。如果我退出并重新登录,它的工作原理很好。这是使用谷歌和Facebook登录(目前为Facebook)。 我已经登录了,大约一个小时后,出现了这个: W/PersistentConnection:pc_0-提供的身份验证凭据无效。这通常表示FirebaseApp实例未正确初始化。确保你的谷歌服务。json文件具有正确的firebase_ur

  • 我正在创建一个BLE应用程序,需要连续启动和停止扫描预定义的时间间隔。我实现它的方式是使用两个Runnable,它们相互调用,如下所示: 我正在尝试开始连续扫描并在单击按钮时暂停。开始按钮可以启动过程,但我无法停止扫描。 如果在停止间隔期间按下停止按钮,扫描将停止。但是,如果在扫描可运行状态下按stop按钮,则会删除stopScan可运行状态下的回调,同时保持扫描可运行状态持续运行。我需要的是两个

  • 问题内容: 我在停止“供稿”时遇到问题;cancel参数似乎对after方法没有任何影响。尽管“进纸停止”已打印到控制台。 我尝试使用一个按钮将启动供稿,而另一个按钮将停止供稿。 随着输出: 问题答案: 问题是,即使你打电话与停止循环,已经有等待消防挂起的工作。按下停止按钮不会触发新的作业,但是旧的作业仍然存在,并且当它自己调用时,它将传入False,这将导致循环继续。 您需要取消待处理的作业,以

  • 我正在使用带有KafkaListener注释的spring kafka v2.5.2。 在运行时,我希望能够向消费者发送停止消费的信号。 我看到了autoStartup参数,但它似乎只对初始化有效,之后无法更改。 我看到了KafkaListenerEndpointRegistry的methode close()。。。 你有什么建议吗? 提前谢谢。

  • 更新06/04这里是消费者出厂设置。它是Spring-Kafka-1.3.1。Kafka经纪人合流版 注意:容器工厂已将自动启动设置为false。这是在加载大文件时手动启动/停止使用者。 运行大约1小时后(时间不同),使用者停止使用来自其主题的消息,即使该主题有许多可用消息。Consumer方法中有一个log语句,用于停止在日志中打印。 我们如何设计Spring-Kafka消费者,使其在停止消费的