Java 如何频繁地重新加载存储数据库信息的类?

Java 如何频繁地重新加载存储数据库信息的类?,java,database,caching,cache-control,Java,Database,Caching,Cache Control,我们有一个Web应用程序,它在启动时从数据库中获取所有必需的信息,并将其存储在Java maps中 这些映射稍后将在应用程序中使用,以获取所需的信息 但在这种方法中,在重新启动应用程序之前,数据库中所做的任何更新都不会反映出来 那么,我们如何在Java中自动重新加载此类类/存储库呢 提前感谢。我的理解是,您只需要重新加载类,因为您需要刷新启动期间从DB加载的数据。那不是真的吗?如果是,那么如果其他机制可以刷新数据,那么我认为您不需要重新加载类 尝试使用一些缓存机制。看一看 正如其他人指出的,您可

我们有一个Web应用程序,它在启动时从数据库中获取所有必需的信息,并将其存储在Java maps中

这些映射稍后将在应用程序中使用,以获取所需的信息

但在这种方法中,在重新启动应用程序之前,数据库中所做的任何更新都不会反映出来

那么,我们如何在Java中自动重新加载此类类/存储库呢


提前感谢。

我的理解是,您只需要重新加载类,因为您需要刷新启动期间从DB加载的数据。那不是真的吗?如果是,那么如果其他机制可以刷新数据,那么我认为您不需要重新加载类

尝试使用一些缓存机制。看一看

正如其他人指出的,您可以使用Quartz scheduler。但是等等。。。那也是另一个图书馆


嗯,你也可以自己去用和,否则。只需将该任务安排为重复执行,正如您在注释中指出的那样,您需要每小时加载一次。

您可以在后台运行一些守护进程
线程
,它实际上会在一段时间间隔内与数据库交互以更新最新数据

此外,您还可以使用标准的缓存机制,如EhCache或Guava cache来实现这一点。

您只需使用一个。 您只需为它设置一个任务,它就会为您处理定期更新。 我想,这是专为你做的:D


另一方面,您应该处理配置映射对象上的并行访问/写入-注意线程安全

什么服务器?什么样的网络应用?您需要异步方法或线程在后台运行,并为您执行抓取操作。应该很简单。你要将整个数据库加载到内存中吗?@pcalcao我们不是加载整个数据库,而是加载其中的一些信息。EhCache或Guava是缓存管理库?如果是,那么他们如何能自动重新加载类/存储库?@AdeelAnsari我想要一种机制,每小时后重新加载一次类。但我不理解您的观点“重新加载类和存储库不是我们刷新/从缓存中移出对象的方式。”。那么你的意思是不应该使用EhCache吗?重新加载类和存储库不是我们刷新/从缓存中逐出对象的方式。这些是复杂的API,具有足够的配置选项。这些通常适用于不同的过期策略,如基于元素的策略或缓存范围策略,以及逐出策略,如LRU或LFU策略。嘿,Sam,我的理解是,您只需要重新加载类,因为您需要刷新在开始时从DB加载的数据。那不是真的吗?如果是,那么如果其他机制可以刷新数据,那么我认为您不需要重新加载类。实际上我的意思是你应该使用EhCache或类似的东西。@AdeelAnsari实际上,如果市场上已经有了某种东西,我真的不想重新发明轮子。所以我想我可以看看EhCache.Yip,第一个代码示例就是为您制作的。该示例构建了一个作业,一个触发器,它每40秒触发一次,并使用给定的触发器调度作业。如果对象已经存在,则可以看到该对象没有放入缓存。所以在我的例子中,即使对象存在,它的一个属性也可能发生变化,这使得它成为更新的候选对象。那么,更新必须由类似Hibernate的工具来处理吗?由于我们正在使用Redis,我怀疑我是否能做到这一点。你对此有何评论?@Sam:如果你愿意,可以根据某种及时的方式强制重新加载缓存。