2015-04-07 2 views
0

Итак, я хочу сказать, что я хочу кэшировать некоторые данные таблицы при развертывании приложения. В этом случае я хочу сделать хэш-карту из данных одной таблицы, когда приложение развернуто на сервере (вероятно, jboss или tomcat server).Как кэшировать данные базы данных при развертывании веб-приложения java

Я знаю, как использовать спящий режим, JDBC и т. Д., И получение данных обычно не представляет проблемы, но как получить код поиска данных для самостоятельной работы при создании/развертывании приложения?

Это, вероятно, довольно простая вещь, но я не уверен, как и я не могу найти подходящего руководства.

Любая помощь очень ценится.

+0

Используете ли вы контейнер для инъекций, например EJB, CDI или Spring? Если да, то какой? (У каждого есть функции, которые помогают с этим) – meriton

+0

@meriton Я не использую контейнер. Из 3 вы упомянули выше, я знаком с Весной. Любые советы о том, как я могу достичь этого с весной? –

ответ

0

Из 3 вы упомянули выше Я знаком с весной. Любые советы о том, как я могу достичь этого с весны?

Весенние бобы по умолчанию для Singleton scope и создаются при инициализации ApplicationContext (что происходит при развертывании). Вы можете задать Spring для вызова метода, когда он создал боб с @PostConstruct или реализацией InitializingBean:

@Component 
public class CategoriesCache { 
    @Inject 
    CategoryRepositoy repo; 

    private List<Category> cachedCategories; 

    @PostConstruct 
    void init() { 
     cachedCategories = repo.findAll(); 
    } 
} 

Если вы не хотите использовать контейнер инъекции зависимостей, вы можете использовать ServletContextListener, чтобы получать уведомления о развертывание и выполнить необходимую инициализацию.

+0

Я бы поднял вас, но у меня нет репутации за это:/ Спасибо, все равно, это сработало для меня. –

+0

@ GameGuy1989: Даже если вы еще не можете продвинуться, вы можете отметить ответ как принятый (нажав галочку под кнопками голосования), чтобы указать, что он сработал для вас. – meriton

+0

Готово. Еще раз спасибо: D –

0

Вы можете назвать это из сборки сервлета только для этой цели. Затем в вашем web.xml установите сервлет с помощью runOnStartup other then 0. Это заставляет веб-сервер запускать сервлет в момент загрузки приложения.

+0

Понятно, я проверю это. Будет ли это также хорошим способом сделать мой хэш-файл доступным через приложение? Как, если какой-либо другой модуль должен использовать карту, я могу назвать ее из класса сервлета? –

+0

Вы могли бы просто сделать это, сделав весь статический HashMap в сервлере, а затем попросите статический метод запросить HashMap. – Ractoc

+0

хорошо да эта часть был очевиден. Я понял, что вскоре после того, как я написал этот комментарий, насколько глупым я на самом деле звучал, но я ленился и не стал его редактировать: P ** Решение meriton's ** было наилучшим вариантом. Теперь я изучаю использование lucene для более масштабируемого решения для поиска кеширования текста. Большое спасибо за вашу помощь, но я ценю это: D –

Смежные вопросы