2011-12-14 5 views
1

Мы пишем пользовательское приложение log4j для нашего приложения. Приложение должно регистрировать свои события в базе данных. Теперь проблема связана с настройкой подключения к базе данных. Наши настройки jdbc находятся в файле jdbc.properties, который находится непосредственно в папке WEB-INF.Загрузка файла свойств из папки WEB-INF в приложении log4j

Я попытался доступ к свойствам файла, используя следующий код

 
InputStream stream = Thread.currentThread().getContextClassLoader() 
        .getResourceAsStream("jdbc.properties"); 

... но результаты потока в бытии нуля. Любые идеи, как я могу загрузить файл свойств из папки WEB-INF в приложении log4j без, перемещая файл свойств в другое место?

+0

Я думаю, что это будет искать файл свойств в каталоге WEB-INF/classes. Аналогичный вопрос: http://stackoverflow.com/questions/1108434/howto-load-a-resource-from-web-inf-directory-of-a-web-archive – Manish

+0

Я знаю, следовательно, комментарий о НЕ перемещении файл. –

+0

Проблема заключается в том, что приложение используется, например, при запуске сервера, поэтому сеанс отсутствует и он не привязан к приложению. –

ответ

1

Может быть, вы можете попробовать,

String path =Thread.currentThread().getContextClassLoader().getResource("/").toURI().resolve("../jdbc.properties").getPath(); 
Properties ps=new Properties(); 
ps.load(new FileInputStream(path)); 
+0

Приложение является самостоятельным классом, который расширяет только AppenderSkeleton, и не существует метода getServletContext(). Мне действительно нужно создать ServletContextListener, который сохраняет контекст в статической переменной? –

+0

@KimL - Посмотрите на отредактированный пост. Надеюсь, это поможет вам. – adatapost

+0

Hackish solution, но он работает. –

0

Вы должны быть в состоянии получить файл через ServletContext. т.е .:

ServletContext ctx = ... 
InputStream stream = ctx.getResourceAsStream("/WEB-INF/jdbc.properties"); 

Хорошо, только что видел, что вы не имеете доступа к ServletContext - забыть ответ.

Невозможно добавить информацию о подключении jdbc в log4j.properties? Почему вы разделяете их?

+0

Поскольку остальная часть приложения использует файл jdbc.properties. Не хотите иметь такую ​​же конфигурацию в двух местах. –

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