Page 1 of 1

我们快速回顾一下这里发生的事情

Posted: Sun Mar 23, 2025 8:01 am
by roseline371274
我们将使用 Spring Boot Scheduling Support 来创建一个执行轮询的 cron 调度程序。该配置可以在远程配置中进行,因此我们可以根据需要随时更新它。

在我们的轮询中,我们将把 spring.application.name 与更改的文件列表进行匹配。当与我们的 applicationName 匹配的文件位于变更列表中时,我们将执行重新启动。它使用与 ConfigServer 相同的简单的基于 applicationName 的匹配,以便尽可能接近 Spring。

综合起来,我们得到以下“AutoRefreshConfig”类:


就我个人而言,我对 JGit 有一些理解困难。我并不是一名 Git 专家,但我主 开曼群岛号码数据 要认识一个人,他认识另一个人,他知道我需要在终端中输入什么。

因此,为了清楚起见,
1. 我们首先执行 git fetch。 jGitRepository 不跟踪凭证,所以我们需要在这里使用我们已经在使用的 Spring Config Server 凭证再次设置这些凭证。
2. 然后我们从提取 (FETCH_HEAD^{tree}) 中解析本地头 (“refs/heads/{branch}/^{tree}) 和远程头,并为两者创建 treeParsers。我们使用这些解析器遍历文件树并在 git.diff() 调用中查找更改。3
. 结果是一个简单的 List<DiffEntry>,其中包含文件名和更改状态(如新建、已删除或已更改)。我们将流式传输此列表并在 fileName 上查找与我们的应用程序名称匹配的任何内容。找到后,我们重新启动。如果没有,我们只需记录并等待下一个 cron 触发器。

最后但并非最不重要的一点是,调用 restartEndpoint.restart()。我已经在网上搜索了很长时间,寻找一种无需从 Windows 重新启动服务即可重新启动 Spring Boot 的方法。看起来 Spring Cloud 已经为这个目的准备了一些功能:RestartEndpoint。这将创建一个具有新应用程序上下文的新线程,启动该线程并停止当前上下文。这将保持 JVM 运行并很好地创建一个新的 Spring 应用程序上下文。