Чтение файла свойств из папки веб-приложений Tomcat - PullRequest
2 голосов
/ 08 сентября 2010

Я поместил файл свойств в папку webaaps на tomcat, но не смог получить к нему доступ. Мой код

InputStream is = ClassLoader.getSystemResourceAsStream("database.properties");
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("/database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("/webapps/database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("webapps/database.properties");
}

Тем не менее, я получаю входной поток как ноль.

Ответы [ 4 ]

3 голосов
/ 08 сентября 2010

Метод getSystemResourceAsStream, возвращающий null, означает, что ресурс не найден в пути к классам в указанном месте. И это имеет смысл, поскольку $TOMCAT_HOME/webapps не находится на пути к классам.

Так что либо поместите этот файл в каталог, который находится в classpath вашего приложения (и если вы хотите, чтобы он был вне войны, вам придется поместить его в $CATALINA_HOME/lib - со всеми вытекающими последствиями) или измените свой подход (используйте JNDI для хранения свойств, используйте абсолютный путь и т. д.).

Ссылки

2 голосов
/ 08 сентября 2010

Чтобы получить доступ к файлам свойств по classpath, я поместил эти файлы в "webapp / WEB-INF / classes".

Выполнение подобных действий является стандартным и является хорошим способом избежать проблем с абсолютным путем.

Если ваш проект имеет стандартную структуру Maven, он управляется Maven:

  • источники находятся в "src / main / java"
  • свойства находятся в "src/ main / resources "

Когда Maven упаковывает веб-приложение, классы компилируются в" webapp / WEB-INF / classes ", а ресурсы копируются в тот же каталог.

1 голос
/ 08 сентября 2010

Вы не можете получить доступ к файлу, который находится за пределами вашего веб-приложения таким образом. Этот файл отсутствует в вашем пути к классам, поэтому вы не можете получить его с помощью "ClassLoader". Поместите его в свой classpath (внутри * .war) или получите доступ к нему так:

File f = new File("/absolute/path/to/your/file");
InputStream is = new FileInputStream(f);

Но все же tomcat/webapps не подходит для файла свойств. Может быть, домашний каталог пользователя? Тогда вы можете получить к нему доступ так:

String home = System.getProperty("user.home");
File f = new File(home + "/yourfile.properties");
0 голосов
/ 22 сентября 2010

Необходимо обновить classpath с именем папки, содержащей этот файл. Я сделал, чтобы это работало. Я делал в Eclipse, tomcat и java

java -cp.: $ CLASSPATH: some / location / your / config yourclass

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...