Загрузите файл свойств в Java-сервлет, развернутый в JBoss как война
У меня есть сервлет, развернутый как война в JBoss 4.0.2. У меня есть файл свойств для развернутого приложения. Где я должен положить этот файл? В каталоге conf в папке jboss server\default\conf? Как загрузить этот файл свойств переносимым способом?
4 ответа
Чтобы загрузить этот файл свойств переносимым способом, лучше всего поместить его в classpath веб-приложения (либо в JAR-файл под WEB-INF/lib/
или под WEB-INF/classes/
или на пути к классам сервера приложений, если вы хотите редактировать этот файл без переупаковки вашего веб-приложения) и использовать Class#getResourceAsStream(String)
,
Следующий код получает InputStream
для файла свойств, который находится в том же пакете, что и сервлет, в котором выполняется код:
InputStream inStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("myfile.properties");
Затем, load(InputStream)
это в Properties
объект (пропуская обработку исключений):
Properties props = new Properties();
props.load(inStream);
Просто возьмите servletContext, а затем
InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties");
Properties props = new Properties();
props.load(stream);
Это всегда будет работать, независимо от того, развернете ли вы войну или войну.
Если файл свойств можно развернуть вместе с приложением, сделайте его частью вашего исходного дерева. Это приведет к тому, что файл свойств будет находиться в папке WEB-INF/classes.
Это можно затем прочитать с помощью
Properties properties = loadProperties("PropertyFileName.properties", this.getClass());
...
public static Properties loadProperties(String resourceName, Class cl) {
Properties properties = new Properties();
ClassLoader loader = cl.getClassLoader();
try {
InputStream in = loader.getResourceAsStream(resourceName);
if (in != null) {
properties.load(in);
}
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
Лучшее место для его размещения - под собственным корневым каталогом веб-приложений, например "./WEB-INF/myapp.properties", т.е. относительно того, где контейнер сервлета распаковал ваш .war
или же .ear
файл. Вы можете предоставить файл свойств непосредственно в .war
,
ServletContext
есть метод getRealPath(String path)
который возвращает фактический путь в файловой системе. Используя реальный путь, вы можете загрузить его в Properties
коллекция.
Обновление Код в вашем комментарии пытается найти реальный путь для "/", вы должны запросить относительный путь к вашему файлу свойств, как в:
String propertiesFilePath = getServletContext().getRealPath("WEB-INF/application.properties");
Properties props = properties.load(new FileInputStream(propertiesFilePath));