2013-03-09 30 views
0

这是我的previous question的后续行动。如何更新主要读取的持久数据?

假设我有一个服务器应用程序,它使用了一些只读文件。有时(例如一个小时)我们更新这个文件,应用程序开始使用更新后的数据。

如何实现它?我相信应用程序应定期检查更新,并在更新可用时更新文件。一旦文件被更新,应用程序应该执行所有必要的初始化(例如,使内部缓存失效等),同时仍处理“旧”数据。初始化完成后,它将丢弃“旧”数据,并仅与“新”数据一起工作。

是否有意义?这个问题看起来很通用。是否有任何现成的Java基础结构解决了这个问题?

回答

3

听起来像缓存。两个灵活的线程安全缓存实现是Guava's cache,EhCacheHazelcast。三者都将以线程安全方式过期并重新加载。 Hazelcast和EhCache可以通过网络进行分发。番石榴不分布,但更简单。

如果您决定不想使用缓存,像单身人士那样在内存对象中保存的其他常见用例是double checked locking。它的0123va使番石榴更加优雅。

我建议你使用带缓存的不可变对象或@MarkoTopolnik建议volatile

1

你应该有一个代表所有的数据和服务从它衍生出来,从文件中读取一个对象。保持对该对象的引用volatile,这将确保线程安全的发布。