【发布时间】:2014-10-24 07:10:06
【问题描述】:
我目前正在编写一个服务,它会更改 ConfigurationAdmin 提供的配置。
因为 pid 后面的配置可能会被其他一些服务更新,尤其是在启动时,我有点担心同步。这是因为当时,我的服务通过 Configuration#update() 更新配置,它希望它与调用 ConfigurationAdmin#getConfiguration(String) 时得到的相同。但它有可能在这段时间内被另一个服务改变了——我想避免这种情况。
有什么想法吗?
编辑:这是用例 我想要做的是创建一个服务,为一组特定的 pid 设置默认配置。如果这样的 pid 有配置或有人设置了它,那么我不会对它做任何事情:
- 我从 configadmin 获取配置
- 我取它的属性
- 如果没有相关设置,我设置默认值并更新配置。
我只是担心某些事情会以这种顺序但异步发生:
- (线程 1)。我得到空配置,看到它是空的并设置默认值
- (线程 2)使用不需要默认值的属性更新配置
- (线程 1)由线程 1 更新和覆盖配置
因此我只想保证,当我检查配置是否为空然后设置默认值时,没有人会更新配置。
【问题讨论】: