Что мы делаем, это помещаем его в отдельный каталог на сервере (вы можете использовать что-то вроде / config, / opt / config, / root / config, / home / username / config или что угодно). Когда наши сервлеты запускаются, они читают XML-файл, извлекают из него несколько вещей (наиболее важную информацию о подключении к БД) и все.
Я спросил, почему мы сделали это однажды.
Было бы неплохо хранить все в БД, но, очевидно, вы не можете хранить информацию о подключении к БД в БД.
Вы можете жестко закодировать вещи в коде, но это ужасно по многим причинам. Если информация когда-либо должна измениться, вам нужно пересобрать код и заново развернуть. Если кто-то получит копию вашего кода или файла WAR, он получит эту информацию.
Поместить что-то в WAR-файл кажется хорошим, но если вы хотите что-то изменить, это может быть плохой идеей. Проблема в том, что если вам нужно изменить информацию, то в следующий раз при повторном развертывании она перезапишет файл, поэтому все, что вы не помните, чтобы изменить версию, встроенную в WAR, будет забыто.
Файл в специальном месте на файловой системе у нас работает довольно хорошо. У него нет больших недостатков. Вы знаете, где он находится, он хранится отдельно, что упрощает развертывание на нескольких машинах, если им всем нужны разные значения конфигурации (поскольку это не часть WAR).
Единственное другое решение, которое я могу придумать, - это сохранить все в БД, кроме информации для входа в БД. Это происходит из системных свойств Java, которые извлекаются через JVM. Это API настроек, упомянутый Хансом Доггеном выше. Я не думаю, что это было где-то, когда наше приложение было впервые разработано, если оно не было использовано.
Что касается пути доступа к файлу конфигурации, это просто файл в файловой системе. Вам не нужно беспокоиться о веб-пути. Поэтому, когда ваш сервлет запускается, он просто открывает файл в /config/myapp/config.xml (или где-то еще), и он найдет нужную вещь. Просто жесткое кодирование пути для этого кажется мне довольно безобидным.