当前位置: 首页 > 知识库问答 >
问题:

如何创建依赖于Spring Bean的自定义Spring PropertySource

柯永福
2023-03-14

我试图将spring-cloud堆栈用于一个使用Zuul的项目。在我的组织中,我们有一个基于XML的自定义配置堆栈,它执行属性组合和分层重写。由于这种配置的处理方式,我一直在努力为它创建一个PropertySource。

我的自定义PropertySource必须使用我的配置bean,但是因为PropertySources是在spring boot的引导过程中初始化的,所以应用程序上下文还没有完全初始化,我无法访问公开基于XML的配置系统的自定义bean。

@ConfigurationProperties似乎完全偏向于.properties和.yaml文件。配置bean在ApplicationContextInitializer中初始化。是否有一种方法可以延迟解析各种服务中的ConfigurationProperties以便在初始化后使用配置bean构造自定义属性源?

共有1个答案

章安宜
2023-03-14

我最初试图(在问这个问题之前)在我的配置中创建一个自定义PropertySourceLocator(正如Dave Syer提到的,并在他给出的链接中详细说明的那样),并将其注册到我自己的Spring.Factories(同样,在Spencer Gibb在评论中给出的有用链接中演示了这一点)问题是,我的属性源需要在ApplicationContextInitializer中完成一些工作后进行配置,而所有的属性源似乎都在此之前得到了解决(至少是那些作为org.springframework.cloud.bootstrap.bootstrapConfiguration的工厂连接的属性源)。我想我暗示了这一点,因为我在PropertySource中需要一个特定的bean,而我当时无法从ApplicationContext中获得这个bean。

无论如何,为了解决这个问题,我现在在一个预先定义的ApplicationContextInitializer中注册属性源,以便在另一个初始化配置对象的ApplicationContextInitializer之后进行。类似于:context.getEnvironment().getPropertySources().addFirst(myPropertySource);

这似乎使我的属性源在正确的时间进入环境,并允许我在需要时执行上下文的自定义。

 类似资料:
  • 我想创建一个自定义属性,该属性执行以下操作: 如果请求的URL包含查询参数id,则需要正常授权 如果请求的URL不包含查询参数id,则无需授权 在这种情况下,阅读https://docs.microsoft.com/en-us/aspnet/core/security/authorization/iauthorizationpolicyprovider?view=aspnetcore-3.1并不能

  • 问题内容: 我想在.net C#应用程序上使用数据缓存。到目前为止,我添加了数据缓存并在特定表上添加了SQL缓存依赖项。但这还不够。这些表将被过于频繁地更新,但是与许多缓存的对象无关。这将使数据缓存几乎无用,因为它将被频繁刷新。我想在每个对象的特定行上实现sql缓存依赖项。我怎样才能做到这一点? 问题答案: 您需要了解SqlDependency的工作方式。您订阅一个结果集,并在该结果集发生更改时得

  • 问题内容: 我正在http://www.cafeaulait.org/javafaq.html上阅读#6.10项,然后我开始怀疑大型企业如何创建自己的JVM实现。一个人会尝试(或可行)实验性的东西吗? 问题答案: 从技术上讲,创建该新JVM所需的所有信息都是该语言和目标平台的公共规范。即使字节码解释在很大程度上相同,JVM还是需要根据其是要在台式机还是手机上运行而有所不同。 一些开始寻找信息的地方

  • 本文向大家介绍Android如何创建自定义ActionBar,包括了Android如何创建自定义ActionBar的使用技巧和注意事项,需要的朋友参考一下 当多个界面都有很多相似部分时,可以考虑创建一个功能较全的模板。而在需要时,可以通过引用模板来实现自己想要实现的功能。比如适配器 Adapter,当很多的适配器都差不多时,就可以通过打造一个通用的适配器来实现。本例中主要是如何创建自定义的 Act

  • 标题说明了一切。我想创建一个自定义的prestashop页面,但我不知道如何创建。我真正想做的是:创建一个按钮,打开一个自定义页面。我在网上找不到任何有用的东西,所以我来这里寻求帮助。有人能告诉我怎么做吗?

  • 嗨,如果我用任务列出所有任务--我看到所有导入的ant任务,但是当我试图创建依赖于ant任务的任务时,我得到的是“Could not determine the dependencies of task':testgradle'”。 出现问题的行:-它显然看不到ant init任务。 我做错了什么? 所有编译-编译主源树java文件 byWorld5 copyTestConfiguration-复