Я работаю над приложением на основе весны и сервлетов. Мое требование - загрузить данные из базы данных и сохранить в ehcache. Я написал прослушиватель, который вызывается после запуска сервера jboss. Но проблема заключается в моем приложении, мы используем весенние спящие классы для подключения к базе данных и загрузки данных из БД. Согласно требованию данные должны быть получены из базы данных и хранить в кеш-объекте (ehcache). Но когда загружается класс слушателя, другие файлы конфигурации xml (applicationContext.xml ..) еще не загружены, где мы настраиваем данные источника данных для подключения к базе данных. Ниже мой код:загрузить значение из базы данных при запуске сервера
Класс слушателя.
import net.sf.ehcache.*;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/imports
public class MyInitializationListener extends HibernateDaoSupport implements ServletContextListener {
/** Singleton instance of CacheManager. */
private static CacheManager singletonManager = null;
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("--ServletContextListener destroyed*--");
}
private static CacheManager getInstance() {
if (singletonManager == null) {
singletonManager = CacheManager.create();
}
return singletonManager;
}
private Cache getCache() {
Cache cache = null;
cache = MyInitializationListener.getInstance().getCache("myCache");
return cache;
}
// Run this before web application is started
public void contextInitialized(ServletContextEvent arg0) {
final Cache cache = getCache();
final String dbValue = getDBValue();
//logic here
}
public String getDBValue() throws DataLayerException{
//logic to get the value from database
}
Ниже исключение:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/eas-webservice/ivr]] Exception sending context initialized event to listener instance of class com.data.listener.MyInitializationListener
java.lang.NullPointerException
ли кто-нибудь одно лицо этой ситуации before.What бы наилучшим образом подключиться к базе данных и получить значения из базы данных и хранить в кэше, когда сервер запущен. Предложения были бы полезными.
--EDITED--
Я попытался ниже способом, используя @PostConstruct к способу для вызова LoadData(), когда сервер started.But когда я проверил в заявлении для печати файла журнала не был там, который гласит, что этот метод не вызывается при запуске сервера.
@Component
public class MyDataStore {
@PostConstruct
public void loadData()
{
System.out.println("--In @postconstruct, loadData-");
}
}
Я попытался с помощью PostConstruct, но когда я начал сервер, метод с PostConstruct не вызывается. Нужно ли мне делать какую-либо другую конфигурацию, чтобы сделать метод с аннотированной работой PostConstruct? – javaUser
Нет, но убедитесь, что компонент создан. Поместите System.out.println или что-то в конструкторе, чтобы убедиться, что это так. – Snickers3192
Я создал класс с аннотированным методом PostConstruct с инструкцией System.out.print, и он не вызывался при запуске сервера. – javaUser