从数据库中读取属性的替代方案,而不是使用Apache Commons Configuration。

8
我刚刚发现Apache commons-configuration可以从数据源中读取属性,但是它不会缓存它们。我的应用需要多次读取属性,每次访问数据库速度都太慢了。
我有一个Camel应用程序,它将所有消息发送到以我的自定义bean结尾的路由。这些bean使用原型范围创建(我相信面向对象编程),它们将/需要从SQL数据库中依赖于当前用户的某些属性和数据源(从属性url/name/etc读取)读取一些属性。每个接收到的消息都会创建一个bean,因此属性会被重新读取。 不幸的是,我不能自由选择从哪里读取属性,因为现在有另一个不是我编写的软件(GUI)是用户/属性管理器,它写入数据库。所以我需要从中读取属性。
你能给我提供一个替代方案吗?

使用案例是什么?你读取数据的频率有多高,它有多经常变化,最初存储在哪里? - user684934
您提供的链接“不幸地”是我不想应用的commons补丁。现在我想问一下,我是否可以子类化DatabaseConfiguration(我认为这应该是可能的)。 - mgiammarco
1个回答

7
你可以使用Netflix Archaius项目,该项目提供了你所需的缓存行为和动态刷新功能。Archaius是围绕Commons Configuration构建的。
因此,你可以使用Archaius的DynamicConfiguration而不是子类化DatabaseConfiguration,该类扩展了Commons的AbstractConfiguration。这个类将缓存任何你想要的来源,并使用它们的轮询调度类在指定的间隔内刷新属性。
你只需要实现一个PolledConfigurationSource类,从数据库中获取数据并将其放入Map中即可。应该很简单。

https://github.com/Netflix/archaius/wiki/Users-Guide


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接