OSGi配置文件如Spring配置文件

时间:2016-06-02 18:07:13

标签: osgi apache-karaf osgi-bundle karaf blueprint-osgi

我有两个实现的OSGi服务。一个用于刺激,一个用于测试。

有没有办法如何通过代码在不同的环境中切换它们?像Spring profiles

这样的东西

1 个答案:

答案 0 :(得分:3)

与个人资料没有直接匹配。您可以做的是发布具有不同服务属性的两种服务。在服务使用者身上,您可以使用过滤器来决定使用哪种服务。

在声明性服务中,可以通过为组件提供配置来在运行时更改此过滤器。在代码中,您将过滤器设置为默认值,例如下面的“prod”。

@Reference(target="(profile=prod)")
MyService myService;

在您注入服务的组件的配置中,您可以添加一个属性来更改此过滤器:

myService.target=(profile=dev)

另一种更常见的方法是简单地为dev和prod部署不同的服务。在测试中,您可以部署虚拟服务,同时部署实际服务。这种方法的优点是它可以与OSGi中的任何DI框架一起使用。