【发布时间】:2016-10-02 14:56:56
【问题描述】:
我有一个具有两个实现的 OSGi 服务。一种用于生产,一种用于测试。
有什么方法可以通过代码在不同的环境中切换它们?类似Spring profiles
【问题讨论】:
-
您现在如何注册您的 OSGi 服务?以编程方式?
标签: osgi apache-karaf osgi-bundle karaf blueprint-osgi
我有一个具有两个实现的 OSGi 服务。一种用于生产,一种用于测试。
有什么方法可以通过代码在不同的环境中切换它们?类似Spring profiles
【问题讨论】:
标签: osgi apache-karaf osgi-bundle karaf blueprint-osgi
没有直接匹配的配置文件。您可以做的是发布具有不同服务属性的两个服务。在服务使用者上,您可以使用过滤器来决定使用哪个服务。
在声明式服务中,可以通过为您的组件提供配置在运行时更改此过滤器。在代码中,您将过滤器设置为默认值,如下面的“prod”。
@Reference(target="(profile=prod)")
MyService myService;
在您注入服务的组件的配置中,您可以添加一个属性来更改此过滤器:
myService.target=(profile=dev)
另一种更常见的方法是简单地为 dev 和 prod 部署不同的服务。在您的测试中,您部署一个虚拟服务,而在 prod 中您部署真正的服务。这种方法的优势在于它适用于 OSGi 中的任何 DI 框架。
【讨论】: