Когда я создаю проект с помощью maven, все в порядке, но когда я развертываю его с помощью Tomkat, у меня есть NullPointerException. Класс, где может быть проблема - PropertiesManager. строка журнала: PropertiesManager.getApplicationProperties (PropertiesManager.java:31)
public class PropertiesManager {
private static final String PROPERTY_FILE_NAME =
"resources/application.properties";
private static PropertiesManager Instance;
private Properties properties;
private PropertiesManager() {
}
public static PropertiesManager getInstance() {
if (Instance == null) {
Instance = new PropertiesManager();
}
return Instance;
}
public Properties getApplicationProperties() {
if (properties == null) {
properties = new Properties();
try (InputStream stream = Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream(PROPERTY_FILE_NAME)) {
properties.load(stream);
} catch (IOException e) {
throw new ApplicationException("Failed to load property file", e);
}
}
return properties;
}
}
И строка журнала: ApplicationLifecycleListener.contextInitialized (ApplicationLifecycleListener.java:14) Класс ApplicationLifecycleListener:
public class ApplicationLifecycleListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
Properties applicationProperties = PropertiesManager.getInstance().getApplicationProperties();
DBManager.getInstance().initialize(applicationProperties);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
DBManager.getInstance().stopDb();
}
}
В чем может быть проблема?
Без предоставления файла с точной строкой, которую вы видите NullPointerException
(ни один из предоставленных вами файлов не имеет строк, отображаемых в журнале), трудно быть уверенным. Но один намек заключается в том, что, хотя вы помещаете свои файлы ресурсов для сборки с помощью Maven в папку '<project>/src/main/resources'
, при сборке и упаковке файла war он поместит файлы ресурсов вашего приложения в папку 'WEB-INF/classes'
, которая является частью пути к классам приложения по умолчанию. Следовательно, чтобы правильно ссылаться на них с помощью метода Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
, вам не следует добавлять префикс 'resources\...'
к имени файла, поскольку этот метод уже просматривает файлы в пути к классам приложения по умолчанию. Удалите приставку и посмотрите, работает ли она. Пожалуйста, обратитесь к этому отвечать для более подробной информации.
Как его развернуть? в автономном экземпляре Tomcat, wamp, внутри eclipse или что-то еще? Если вы используете относительный путь, я думаю, это может иметь отношение к вашей проблеме ...