В зависимости от вашего веб-сервера, вы можете разместить файл свойств в каком-либо месте, которое включено в classpath. Например, для некоторых версий tomcat это будет ${TOMCAT_BASE}/shared/classes
. Веб-приложение может затем использовать что-то вроде следующего, чтобы прочитать файл и автоматически найти его в этом месте.
ServletContext context = getServletContext();
InputStream is = context.getResourceAsStream("yourfilename.cnf");
Вы также можете указать имя файла после имени, установленного в вашем веб-приложении, и использовать это имя в своем коде при загрузке файла из classpath. Таким образом, вы можете иметь файлы свойств для нескольких веб-приложений в общем каталоге, не конфликтуя друг с другом.
Вы указали, что у вас нет доступа к ServletContext, потому что вы хотите, чтобы код был в служебном классе. Один из способов обойти это ограничение - зарегистрировать ServletContextListener, который создает экземпляр средства чтения вашего файла свойств (поскольку он имеет доступ к контексту) и регистрирует его, чтобы его мог использовать другой код. Примерно так:
public class MyServletContextListener extends ServletContextListener{
public void contextInitialized(ServletContextEvent event){
ServletContext context = event.getServletContext();
context.setAttribute("settings", new MyPropertyReader(context));
}
public void contextDestroyed(ServletContextEvent event){}
}
}