首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BootstrapPropertySourceLocator : BootstrapContext不包含Micronaut bean

BootstrapPropertySourceLocator : BootstrapContext不包含Micronaut bean
EN

Stack Overflow用户
提问于 2021-02-04 07:46:20
回答 1查看 86关注 0票数 0

我正在编写代码,以便能够从文件中热重新加载属性。我从已挂载的卷中提取kubernetes密钥作为类中的基础(KubernetesConfigurationClient)。

现在我有一个这样的类:

代码语言:javascript
复制
@Singleton
@Requires(property = ConfigurationClient.ENABLED, value = StringUtils.TRUE, defaultValue = StringUtils.FALSE)
@BootstrapContextCompatible
public class MountedVolumeConfigurationClient implements ConfigurationClient {

另一个是:

代码语言:javascript
复制
@ConfigurationProperties(MountedVolumeConfiguration.PREFIX)
@BootstrapContextCompatible
public class MountedVolumeConfiguration {

我的application.yml:

代码语言:javascript
复制
micronaut:
  application:
    name: micronaut-service
  server:
    port: 8080

我的bootstrap.yml

代码语言:javascript
复制
micronaut:
  application:
    name: micronaut-service
  config-client:
    enabled: true

poc:
  client:
    mounted-volumes:
      enabled: true
      config-map-paths:
        - /configmaps
      secret-paths:
        - /secrets

现在,如果我的gradle.build依赖项中有implementation("io.micronaut.kubernetes:micronaut-kubernetes-discovery-client:2.2.1-SNAPSHOT"),代码就可以很好地工作,但是如果没有,它就不会加载Singleton bean。

我发现原因在于DefaultApplicationContext类中的这段代码

代码语言:javascript
复制
        private BootstrapPropertySourceLocator resolveBootstrapPropertySourceLocator(String... environmentNames) {
            if (this.bootstrapPropertySourceLocator == null) {

                BootstrapApplicationContext bootstrapContext = new BootstrapApplicationContext(bootstrapEnvironment, environmentNames);
                bootstrapContext.start();
                if (bootstrapContext.containsBean(BootstrapPropertySourceLocator.class)) {
                    initializeTypeConverters(bootstrapContext);
                    bootstrapPropertySourceLocator = bootstrapContext.getBean(BootstrapPropertySourceLocator.class);
                } else {
                    bootstrapPropertySourceLocator = BootstrapPropertySourceLocator.EMPTY_LOCATOR;
                }
            }
            return this.bootstrapPropertySourceLocator;
        }

当我的依赖中有micronaut-kubernetes-discovery-client时,if (bootstrapContext.containsBean(BootstrapPropertySourceLocator.class))是真的,当我没有的时候是假的。

添加了一些上下文,我正在尝试在kubernetes中将secrets和configmaps作为卷安装时都可以热重新加载。现在,micronaut仅监视configmap的更改,并且只能从已安装的卷中读取机密。我希望完全独立于kubernetes API。

EN

回答 1

Stack Overflow用户

发布于 2021-02-04 18:42:38

我刚刚发现我遗漏了这个依赖项:当应用io.micronaut.kubernetes:micronaut-kubernetes-discovery-client:2.2.1-SNAPSHOT时,它也包含这个依赖项:io.micronaut:micronaut-discovery-client

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66037424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档