Да, конечно, вы можете реализовать это
Я нарисую небольшую архитектуру, а затем объясню вам:
Прежде всего, вы можете узнать оКартографы здесь и TDG здесь .У маппера есть метод с именем cacheAll () , который вызывает и делегирует методу TDG cacheAll () , который, в свою очередь, выполняет задачу получения всех строк из таблицы из базы данных (строк, которые вы хотите кэшировать в объекте кеша).
поэтому сначала вам нужно создать слушатель, реализующий "ServletContextListener" , что означает, что он слушает весь контекст сервлета, и внутри contextInitialized вам нужно вызвать mp.fill (Mapper.cacheAll ()) , поэтому это похоже на sthg (это общий код, конечно, лучше его написать и оптимизировать)
public class myServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
mp.fill(Mapper.cacheAll());
}
//
}
Не забудьте добавить ваш слушатель в web.xml:
<listener>
<listener-class>myServletContextListener </listener-class>
</listener>
, поэтому при запуске сервера он будет кэшировать все записи в mp hashmap.в объекте кэша.
Что касается обновления кэша на основе изменения базы данных, вам придется использовать шаблон наблюдателя .
ОБНОВЛЕНИЕ
Я забыл упомянуть об объекте кэша, я предполагаю, что вы хотите, чтобы он был доступен для всех пользователей или вашего приложения, поэтому вы должны кодировать его как одиночный(одноэлементный шаблон), код такой:
public class cacheObject
{
private static Map cMap;
private static cacheObject cObject;
private cacheObject()
{
cMap = Mapper.cacheAll();
}
public static synchronized cacheObject getInstance()
{
if (cObject == null){
cObject = new cacheObject();
}
return cObject;
}
}
Также, если данные, которые вы хотите кэшировать, могут быть изменены пользователями, поэтому сделайте его Threadlocal синглтон.