Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#1432 导致我的配置流程失效 #1560

Closed
hexinzhe opened this issue Oct 12, 2018 · 10 comments
Closed

#1432 导致我的配置流程失效 #1560

hexinzhe opened this issue Oct 12, 2018 · 10 comments
Labels
discussion Categorizes issue as related to discussion

Comments

@hexinzhe
Copy link

我看一些人会需要 apollo 配置能覆盖本地的,并且在最新版本中还“修复”了这个问题。
但其实我一直在利用这个特性来实现本地开发修改隔离,方便开发时开发人员自行修改,如果使用 -D 毕竟不是那么方便,本地配置可能很多。只要打包的时候将这个本地配置剔除出去就行了,线上所有配置还走 apollo 即可。结果 1.1 改策略之后我本地就不能覆盖远程配置了,希望能提供一种选项能退回之前方式,或者你们有什么最佳实践分享一下?

@nobodyiam
Copy link
Member

本地开发可以使用本地开发模式

不建议在项目中通过配置文件覆盖,因为比较容易把本地配置文件误提交到远端仓库。

@hexinzhe
Copy link
Author

我确实把本地开发模式给忘了,一直没用过。
不过您说的误提交,

  1. 如果是指提交到远程仓库之后会导致其余环境下 apollo 的配置也会被覆盖的话,并不会。
  2. 如果是指提交到远程仓库后会导致干扰其它的人本地配置的话,确实是,但本地开发模式也有同样的问题,这种事情无法避免。
    本地开发模式倒是能解决,但问题是一大坨配置又塞到源码里面了,原本只需要“继承” apollo 的绝大部分配置,需要修改的地方手动覆盖即可(与你们的 public ns 思路一致),现在则变成了本地配置与 apollo 不能并存,本地想要修改,就不能用 apollo,这是不是不太合适呢?

@qmwu2000
Copy link
Collaborator

qmwu2000 commented Oct 13, 2018 via email

@hexinzhe
Copy link
Author

@qmwu2000 不太明白,我的意思是本地开发模式不能复用 apollo 的配置,没有想要完全隔离呀

@nobodyiam
Copy link
Member

@hexinzhe

我指的误提交是指代码中的配置文件如果优先级高于apollo,那么一旦这些文件随代码提交之后,在实际运行的时候就会生效,从而导致问题。

所以,对于本地开发的临时配置,一般是通过其它外部化的方式解决,比如-D参数,比如本地模式中的本地配置文件等,这类方式杜绝了本地配置错误随代码提交的可能。

还有一种方式是每个开发都在apollo上创建一个集群,然后本地server.properties中指定idc=对应的集群名字,也能实现开发之间互不影响。

@hexinzhe
Copy link
Author

ok,明白,我也看到之前有别人提到这个问题,但是这种情况很好解决,这个配置文件不打到包里就行了,不管是配置 maven 生命周期还是配置 ci 流程都好办,并且还是个一劳永逸的操作。如果因此就在本地禁止 apollo,好像有点因噎废食吧。
至于您说的方法,是可以解决我说的问题,但也过于麻烦了。相比之下可能还不如本地开发模式来的方便。
所以我还是倾向于继续应用我原本这种方式。

@nobodyiam
Copy link
Member

有一个办法可以实现你的目标:

  1. 在apollo创建一个公共namespace,比如local.properties,配置为空并发布
  2. 应用中引用该公共namespace并确保排序位于其它namespace之前,由于该namespace没有任何配置,所以对应用不会有任何影响
  3. 在代码中resources下放一个META-INF/config/local.properties文件,在里面写入要覆盖的配置即可
  4. 打包或提交代码时设置忽略该文件即可

该方式能工作的原因是在Apollo中有预埋逻辑,会去尝试读取该文件作为namespace配置的补充,详细可以参考DefaultConfig.java

@hexinzhe
Copy link
Author

没毛病,多引了一个 namespaces:apollo.bootstrap.namespaces=application-dev,application,然后 pom 里面添加一个复制任务

<copy todir="${project.build.outputDirectory}/META-INF/config/">
    <fileset dir="${project.build.outputDirectory}/">
        <include name="application-dev.properties"/>
     </fileset>
 </copy>

就可以了。

@hexinzhe
Copy link
Author

多谢各位了

@hhh220
Copy link

hhh220 commented Oct 25, 2021

没毛病,多引了一个 namespaces:apollo.bootstrap.namespaces=application-dev,application,然后 pom 里面添加一个复制任务

<copy todir="${project.build.outputDirectory}/META-INF/config/">
    <fileset dir="${project.build.outputDirectory}/">
        <include name="application-dev.properties"/>
     </fileset>
 </copy>

就可以了。

你好,请问下这个复制文件在pom文件中是怎么添加的?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussion Categorizes issue as related to discussion
Projects
None yet
Development

No branches or pull requests

4 participants