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

注册同一bean的不同配置

袁运锋
2023-03-14

在Java9上使用Spring5。。。。

甚至不确定这是可能的。有一个非常简单的类:

public class Exchange {
  @Autowired
  private OtherService other;

  @JmsListener(destination = {some.queue})
  @Transactional
  public void receive(String payload) {
    other.send(payload)
  }
}

ExchangeOtherService都只需要几个配置属性(即一些.queue)就可以工作。要注册(通过BeanDefinitionRegistryPostProcessorApplicationContextInitializer)Exchangebean的多个实例,但带有前缀配置属性。在注册bean时是否仍要更改属性定义?

共有1个答案

况安然
2023-03-14

我认为您需要两件事的组合,@ConfigurationProperties@Qualifier

让我们提供一个前缀,它适用于在该类中加载的所有属性。

@Qualifier允许您指定您想要的潜在多个有效的@Autowire目标中的哪一个。指定bean名称,然后设置。

快速未经测试的示例:

@Component("FooExchange")
@ConfigurationProperties(prefix = "foo")
class FooExchange implements Exchange {
    @Value("enabled") private boolean enabled;
    ...
}

@Component("BarExchange")
@ConfigurationProperties(prefix = "bar")
class BarExchange implements Exchange {
    @Value("enabled") private boolean enabled;
    ...
}

您要定义的属性包括:

foo.enabled = true
bar.enabled = true

当你注射一个时:

@Autowired
@Qualifier("FooExchange")
private Exchange myInjectedExchange; // Which will get FooExchange

编辑:您可以使用@EnableConfigurationProperties注释一个配置类或主类,以启用配置属性。

 类似资料:
  • 我的客户机/服务器上的推送通知设备注册管理有一个小问题。 同样,这里的问题是,我有两个或更多的注册ID都可以工作(如果我旧的一个在尝试从服务器发布消息时不工作,这不会有问题,因为我可以简单地清理它)。

  • 在我的应用程序中,我有以下代码可注册到GCM服务: 当我运行这段代码时,我在服务器中看到我的设备用2个不同的注册了两次,当服务器发送推送时,设备收到2条消息。 这是正常的事情吗?有没有办法确保只有一个?

  • 我在不同的机器上运行具有不同的相同kafka代理集群的两个模式注册表。 该实例没有任何问题,运行良好。但是当我试图在DEV上创建一个新模式时,问题就开始了,它会转到QA。所以 是否不可能为同一个代理集群运行两个不同的模式注册表? 谢谢

  • 问题内容: 我有一个包装连接池的类,该类从spring配置中获取其连接详细信息,如下所示: 此bean稍后在服务中使用,并与注释自动关联。 我的问题是,我该如何复制该bean并为其提供不同的连接详细信息,然后在服务中添加它。意思除了上面,我将有: 并在服务中: 问题答案: 您可以与结合使用,但在这种情况下,我建议使用: 甚至更简单:

  • 我对Android的服务有点“问题”。关键是,每次我请求注册id时,服务器都会返回不同的注册id。最糟糕的是,在进行测试后,旧的和新的都正常工作!!(我向老用户和新用户发送推送消息,我的应用程序正在接收来自每一个用户的推送!!)。 这是我正在使用Android服务器中的寄存器: 我不知道我做错了什么,但是,这已经发生在我身上两个月了(或多或少)。在我从来没有遇到过这个问题之前,服务器通常会返回相同

  • 我如何配置Bean,从一个新的yml文件加载和工作所有属性,从另一个新的yml加载和工作另一个Bean?最佳实践是什么? 我发现了使用的示例,并且这个bean可以读取几个资源(yml文件),但是在另一个bean中,当我读取这个时,我无法获得特定的yml,因为这个的将包含我添加到其中的所有yml资源。