apollo icon indicating copy to clipboard operation
apollo copied to clipboard

Apollo是否有enabled机制;即引入Apollo依赖,但是配置文件不指定相关配置信息,控制台不会打印相关日志

Open HelloHaiNG opened this issue 4 years ago • 13 comments

版本:1.5.1 描述:maven引入apollo-client依赖;application.yml配置文件不配置app.id app.meta等配置信息 启动应用,控制台会打印apollo对应的WARN日志 期望:Apollo有没有类似于注册中心相应中间件的enabled机制,如果enabled=false,则不启用也不 打印Apollo相关日志内容

HelloHaiNG avatar Apr 28 '20 02:04 HelloHaiNG

Apollo是显式启用的,比如@EnableApolloConfig或是apollo.bootstrap.enabled,如果这些都没配置,是不会打印Apollo相关日志的

nobodyiam avatar May 02 '20 06:05 nobodyiam

但是考虑这种情况:项目复杂时会将通用的代码抽取成为几个jar包当作依赖库,在通用代码的地方写着@EnableApolloConfig为了方便业务项目直接使用,但在单元测试时需要禁用这个功能啊,在单元测试的配置文件中写了apollo.bootstrap.enabled也管用的,spring自己的很多配置都是在配置文件指明enable为false就可以禁用了

Ayden-Franklin avatar Jun 02 '20 07:06 Ayden-Franklin

不过这里也担心出现一种情况,假设增加了apollo.config.enabled=true/false这一选项来控制apollo是否启用,如果在依赖库中配置了apollo.config.enabled=false,但是在实际的应用中没有配置,那么也会影响到应用本身的配置加载?

nobodyiam avatar Jun 07 '20 11:06 nobodyiam

不过这里也担心出现一种情况,假设增加了apollo.config.enabled=true/false这一选项来控制apollo是否启用,如果在依赖库中配置了apollo.config.enabled=false,但是在实际的应用中没有配置,那么也会影响到应用本身的配置加载?

按照spring的约定,这种配置文件都是有优先级的,实际应用中遵照spring的规范就可以了。我会在单元测试这种profile中配置为false,而在production这种profile中配置为true,这样才够灵活。 照spring的约定,实际应用中的配置优先级更高,会覆盖依赖库中的相同配置。

Ayden-Franklin avatar Jun 09 '20 05:06 Ayden-Franklin

我建议是参考Spring cloud的标准做法,支持各种灵活的搭配,按照spring的约定处理好优先级,Profile, apollo.config.enabled,AutoConfiguration以及ConditionalOnXX这些各种条件判断。这样才足够灵活,与spring集成也更方便

Ayden-Franklin avatar Jun 09 '20 05:06 Ayden-Franklin

我建议是参考Spring cloud的标准做法,支持各种灵活的搭配,按照spring的约定处理好优先级,Profile, apollo.config.enabled,AutoConfiguration以及ConditionalOnXX这些各种条件判断。这样才足够灵活,与spring集成也更方便

类似于nacos配置中心

HelloHaiNG avatar Jun 09 '20 06:06 HelloHaiNG

@nobodyiam 可以支持通过配置来开关apollo吗,这样可以让一份代码运行在本地时不生效,但部署在服务器上时配置为生效,另外,可以支持Spring的Profile吗,例如@Profile("!test")在单元测试不生效。有没有支持的计划,或者是拒绝这个建议,盼望答复。多谢!

Ayden-Franklin avatar Jun 15 '20 06:06 Ayden-Franklin

这是一个合理的需求,另外支持 Spring 的 Profile 和支持配置开关是一回事,因为配置可以在不同的 Profile 下有不同的值。

nobodyiam avatar Jun 21 '20 02:06 nobodyiam

建议两种都支持,配置是写在yaml或properties文件中的,Profile是可以在代码中直接排除掉一些环境的,比如Profile("!test")就是一个非常有用的写法。两种都支持会让项目更灵活,使用者可以根据自己的需要灵活使用其中一种

Ayden-Franklin avatar Jun 22 '20 06:06 Ayden-Franklin

@nobodyiam 这个功能有没有计划实现呢

Ayden-Franklin avatar Aug 21 '20 03:08 Ayden-Franklin

@Macrame 目前看下来结合Spring的Profile就可以支持了,不需要单独开发额外的功能?

nobodyiam avatar Aug 22 '20 07:08 nobodyiam

增加如下配置,并不生效,还是会去获取apollo的配置信息

apollo:
    bootstrap:
        enabled: false

是不是这个配置就无法生效

关闭后,还连接apollo

roneywei avatar Jan 06 '22 08:01 roneywei

增加如下配置,并不生效,还是会去获取apollo的配置信息

apollo:
    bootstrap:
        enabled: false

是不是这个配置就无法生效

关闭后,还连接apollo

Cannot close via apollo.bootstrap.enabled = false, maybe you use annotation like @EnableApolloConfig in other place.

The design point is that when you want to disable it, you need to disable everything, but once you want to enable it, just enable one place.

Anilople avatar Jan 06 '22 11:01 Anilople