3

类似于这个线程,但不完全是:How To Cache Information In A Threadsafe Manner

处理“参考数据”的通常模式是什么——应用程序经常读取的数据,通常在数据库或属性文件中外部化,但很少更新(几天、几周、几个月)?当数据更新,它将在外部更新。

这通常是我可以注入 DAO 并因此能够管理其自己的内容的单例吗?我喜欢在这个服务上公开一个 refresh() 方法来强制刷新(即,通过一个 MBean - 所以我不必反弹应用程序)的想法。

从另一个 SO 线程来看,听起来人们可能会在必要时实例化 DAO,并在该级别透明地缓存。

我有点喜欢将单例服务注入从数据库加载数据的真实 DAO 或返回硬编码响应的模拟/测试替身的想法。但是,如果我要通过 java 枚举将服务实现为单例,这会使通过 Spring 将其连接起来有点问题。

那么,其他人通常如何处理参考数据?随意查询但在后台进行缓存?还是单独的内存服务?

4

1 回答 1

2

我通常使用 Spring 将 DAO 实现注入我的服务层,并且正如您提到的,除了基于 SQL 的实现之外,我通常还有一个测试实现 ( XMLDao, FlatFileDao)。对于小型数据集,我通常编写自己的缓存并将从基础表加载的所有数据存储在内存中。

说了这么多,我有使用相当小的数据集的优势。如果我正在处理更大的数据集,我可能会考虑现成的缓存解决方案,可能分布在多个 JVM 上(如Terracotta)。

正如我在上一个线程中提到的,我还公开了一个 refresh() 方法。在不需要及时传播数据更新的情况下,我只需通过 MBean 手动调用它。在我希望自动执行此操作的情况下,我使用 Tibrv 来监听来自数据库的更新并刷新缓存的数据(使用 MS-SQL 触发器生成 Tibrv 消息)。

我不太明白您对使用 Java 枚举来实现服务的引用 - 这将如何工作?

于 2009-07-06T15:21:44.983 回答