我正在使用Spring Config在git服务器中共享一些Spring Boot微服务的配置。
效果很好,但是当我旅行时,有时不得不离线工作。
我已经配置了Spring Config微服务本地配置文件,以便从本地git(文件:)获取配置,而不是从HTTP git服务器获取配置,因此我可以更改配置和测试,而无需访问主git服务器。
问题在于,由于我无法执行“ git push”将更改推送到主存储库,Spring Confgig记录了该内容并显示此消息:
The local repository is dirty or ahead of origin. Resetting it to origin/master.
并重置它,删除我最近一次的本地提交以及最近的配置更改。
如何使Spring Config仅仅获取本地git中最后提交的配置,而忽略是否将其推送到主服务器?
答案 0 :(得分:0)
实际上,通过spring-cloud-config源代码,您将看到:
if (!isClean(git, label)) {
this.logger.warn(
"The local repository is dirty or ahead of origin. Resetting"
+ " it to origin/" + label + ".");
resetHard(git, label, LOCAL_BRANCH_REF_PREFIX + label);
}
解决方案
因此它将始终尝试执行此操作,唯一的解决方法将类似于以下答案: How spring cloud config use local property override remote property
您需要提交:
spring:
cloud:
config:
allowOverride: true
overrideNone: false
要使用的配置属性。例如:local / my-app.properties。如果确实有一个用于存储所有属性的远程仓库,请确保将其合并到master。
然后,您可以根据需要在Spring Boot应用程序的application.yml / application.properties中更改任何应用程序属性。远程属性文件不会覆盖它。
替代
或者,您可以只删除正在作为开发环境工作的环境的配置文件。在上面的示例中,您只需从远程存储库中删除local / my-app.properties并提交master。这样一来,它就永远不会打扰在那里覆盖本地应用程序属性,因为不存在用于cloud-config的属性文件。
如果不清楚,请发表评论,以便我改进说明。
答案 1 :(得分:0)
我有类似的问题。 (区别是我没有使用Spring Config微服务,而是将Spring配置服务器作为独立的应用程序运行)
但这也应该对您有用: 我没有使用本地git存储库(文件:)启动本地配置服务器,而是使用本地spring配置文件启动了它。
spring:
profiles:
active: native
cloud:
config:
server:
native:
searchLocations: file:///path/to/local/git/repository
因此现在提供了本地存储库的内容,并且访问时无需进行任何重置
答案 2 :(得分:0)
您可以使用与文件系统后端相同的目录,以及与属性文件相同的git存储库。您应该为配置服务器制作2个bootstrap.properties文件。一个用于文件后端,另一个用于git存储库。例如,我想使用文件系统后端进行开发,并使用git存储库进行生产。我制作了bootstarp-dev.properties和bootstrap-prd.properties。
## bootstarp-dev.properties
server.port=8887 // If you want to launch both a config server for dev and a config server for prd, you must assign different ports.
spring.cloud.config.server.native.searchLocations=file://PATH_OF_YOUR_DIRECTORY
## bootstarp-prd.properties
server.port=8888
spring.cloud.config.server.git.uri=YOUR_GIT_URL
如果使用-Dspring.profiles.active=dev,native
参数启动配置服务器,则配置服务器将以本地文件的形式访问属性文件。
如果使用-Dspring.profiles.active=prd
参数启动配置服务器,则配置服务器将以git文件的形式访问属性文件。
完成。
答案 3 :(得分:-1)
如何使Spring Config仅仅获取本地git中最后提交的配置,而忽略是否将其推送到主服务器?
这就是--assume-unchaged
的作用。
--assume-unchaged
提高此文件上的--assume-unchaged
标志,使其停止跟踪此文件上的更改
--[no-]assume-unchanged
指定此标志时,为路径记录的对象名称不会更新。
相反,此选项设置/取消设置路径的
assume unchanged
位。当
assume unchanged
位为 on 时,用户承诺不更改文件,并允许Git假定工作树文件与索引中记录的文件匹配。如果要更改工作树文件,则需要取消设置该位以告知Git。当在lstat(2)系统调用非常慢的文件系统(例如cifs)上处理大型项目时,这有时会很有帮助。如果需要修改索引中的该文件,Git将失败(正常)。合并提交时;因此,如果假定未跟踪的文件在上游进行了更改,则需要手动处理这种情况。