apollo
apollo copied to clipboard
Apollo是否有enabled机制;即引入Apollo依赖,但是配置文件不指定相关配置信息,控制台不会打印相关日志
版本:1.5.1 描述:maven引入apollo-client依赖;application.yml配置文件不配置app.id app.meta等配置信息 启动应用,控制台会打印apollo对应的WARN日志 期望:Apollo有没有类似于注册中心相应中间件的enabled机制,如果enabled=false,则不启用也不 打印Apollo相关日志内容
Apollo是显式启用的,比如@EnableApolloConfig
或是apollo.bootstrap.enabled
,如果这些都没配置,是不会打印Apollo相关日志的
但是考虑这种情况:项目复杂时会将通用的代码抽取成为几个jar包当作依赖库,在通用代码的地方写着@EnableApolloConfig
为了方便业务项目直接使用,但在单元测试时需要禁用这个功能啊,在单元测试的配置文件中写了apollo.bootstrap.enabled也管用的,spring自己的很多配置都是在配置文件指明enable为false就可以禁用了
不过这里也担心出现一种情况,假设增加了apollo.config.enabled=true/false
这一选项来控制apollo是否启用,如果在依赖库中配置了apollo.config.enabled=false
,但是在实际的应用中没有配置,那么也会影响到应用本身的配置加载?
不过这里也担心出现一种情况,假设增加了
apollo.config.enabled=true/false
这一选项来控制apollo是否启用,如果在依赖库中配置了apollo.config.enabled=false
,但是在实际的应用中没有配置,那么也会影响到应用本身的配置加载?
按照spring的约定,这种配置文件都是有优先级的,实际应用中遵照spring的规范就可以了。我会在单元测试这种profile中配置为false,而在production这种profile中配置为true,这样才够灵活。 照spring的约定,实际应用中的配置优先级更高,会覆盖依赖库中的相同配置。
我建议是参考Spring cloud的标准做法,支持各种灵活的搭配,按照spring的约定处理好优先级,Profile
, apollo.config.enabled
,AutoConfiguration
以及ConditionalOnXX
这些各种条件判断。这样才足够灵活,与spring集成也更方便
我建议是参考Spring cloud的标准做法,支持各种灵活的搭配,按照spring的约定处理好优先级,
Profile
,apollo.config.enabled
,AutoConfiguration
以及ConditionalOnXX
这些各种条件判断。这样才足够灵活,与spring集成也更方便
类似于nacos配置中心
@nobodyiam 可以支持通过配置来开关apollo吗,这样可以让一份代码运行在本地时不生效,但部署在服务器上时配置为生效,另外,可以支持Spring的Profile吗,例如@Profile("!test")在单元测试不生效。有没有支持的计划,或者是拒绝这个建议,盼望答复。多谢!
这是一个合理的需求,另外支持 Spring 的 Profile 和支持配置开关是一回事,因为配置可以在不同的 Profile 下有不同的值。
建议两种都支持,配置是写在yaml或properties文件中的,Profile是可以在代码中直接排除掉一些环境的,比如Profile("!test")就是一个非常有用的写法。两种都支持会让项目更灵活,使用者可以根据自己的需要灵活使用其中一种
@nobodyiam 这个功能有没有计划实现呢
@Macrame 目前看下来结合Spring的Profile就可以支持了,不需要单独开发额外的功能?
增加如下配置,并不生效,还是会去获取apollo的配置信息
apollo:
bootstrap:
enabled: false
是不是这个配置就无法生效
关闭后,还连接apollo
增加如下配置,并不生效,还是会去获取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.