最近有关托管服务的帖子让我想起了我值得一提的Apache Felix File Install中的一项功能。 在与Holger合作进行项目时,我从他那里了解到File Install不能仅用于管理包。 它还监视配置文件,并在托管服务各自的配置更改时更新托管服务。
文件安装还可以配置托管服务工厂等。 但是,我发现对于配置数据通常是特定于环境的托管服务(例如打印机URL,数据库URL,TCP端口)特别有用。 最好的事情是:它使您摆脱了以编程方式摆弄Configuration Admin的麻烦。
怎么运行的
可以告诉“文件安装”监视某个文件夹(通常通过系统属性)。 然后,您可以将配置文件(普通Java属性文件)放入该文件夹。 配置文件通过命名约定与托管服务关联。 文件名的格式必须为<pid> .cfg。 如果存在具有匹配PID的托管服务,则在文件更改时将对其进行更新。
例
我在GitHub上放了一个最小的独立示例。 它有一个捆绑包,提供了如下实现的EchoService:
public class EchoService implements ManagedService {
public void updated( Dictionary<String, ?> properties ) {
if( properties != null ) {
System.out.println( "port = " + properties.get( "port" ) );
}
}
}
易于发现:其全部目的是在配置更改时将其打印出来。
EchoService已使用echoservice
的PID注册。 除捆绑软件外,还有一个包含配置文件的项目。 它名为echoservice.cfg
并具有一个属性: port = 7
。
启动配置将必要的软件包组合在一起:OSGi框架(此处为Equinox),示例软件包,Felix Gogo Shell(用于诊断问题)和文件安装以及Configuration Admin。 这些虚拟机参数
-Dfelix.fileinstall.dir="${project_loc:com.codeaffine.fileinstall.example.config}"
-Dfelix.fileinstall.noInitialDelay=true
-Dfelix.fileinstall.poll=1000
告诉“文件安装”监视项目文件夹并每秒检查一次更改。 多亏了project_loc
变量,启动配置可在整个开发环境中移植。
现在我们启动OSGi框架,控制台输出将如下所示:
port = 7
如果我们对echoservice.cfg
文件进行更改并稍等片刻,我们将看到EchoService已更新。 新配置将显示在控制台日志中。
更多的
如果这引起您的兴趣,您可能需要更深入地了解File Install。 它还支持托管服务工厂,可以写回配置更改,可以替换属性值,以及监视多个文件夹。 文档页面包含所有详细信息。