OSGi 配置文件,例如 Spring 个配置文件

OSGi profiles like Spring profiles

我有一个具有两个实现的 OSGi 服务。一个用于生产,一个用于测试。

有什么方法可以通过代码在不同的环境中切换它们吗?像 Spring profiles

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

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

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

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

myService.target=(profile=dev)

另一种更常见的方法是简单地为开发和生产部署不同的服务。在您的测试中,您部署了一个虚拟服务,而在生产中,您部署了真正的服务。这种方法的优点是它适用于 OSGi 中的任何 DI 框架。