我有两个实现的OSGi服务。一个用于刺激,一个用于测试。
有没有办法如何通过代码在不同的环境中切换它们?像Spring profiles
这样的东西答案 0 :(得分:3)
与个人资料没有直接匹配。您可以做的是发布具有不同服务属性的两种服务。在服务使用者身上,您可以使用过滤器来决定使用哪种服务。
在声明性服务中,可以通过为组件提供配置来在运行时更改此过滤器。在代码中,您将过滤器设置为默认值,例如下面的“prod”。
@Reference(target="(profile=prod)")
MyService myService;
在您注入服务的组件的配置中,您可以添加一个属性来更改此过滤器:
myService.target=(profile=dev)
另一种更常见的方法是简单地为dev和prod部署不同的服务。在测试中,您可以部署虚拟服务,同时部署实际服务。这种方法的优点是它可以与OSGi中的任何DI框架一起使用。